본문 바로가기

백준/실버

[백준 5046번] 전국 대학생 프로그래밍 대회 동아리 연합 (C++)

문제링크 : https://www.acmicpc.net/problem/5046

 

5046번: 전국 대학생 프로그래밍 대회 동아리 연합

첫째 줄에 참가자의 수 1 ≤ N ≤ 200, 예산 1 ≤ B ≤ 500000, 호텔의 수 1 ≤ H ≤ 18, 고를 수 있는 주의 개수 1 ≤ W ≤ 13이 주어진다. 다음 줄부터 각 호텔의 정보가 주어지며, 호텔의 정보는 두 줄로

www.acmicpc.net

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = 987654321;

int arr[19];
int result = MAX;

int main()
{
    ios_base::sync_with_stdio(0); 
	cin.tie(0);
    
    int N, B, H, W;
    cin >> N >> B >> H >> W;
    for(int i=0; i<H; i++)
    {
        int p;
        cin >>p;
        for(int j=0; j<W; j++)
        {
            cin >> arr[i];
            if(arr[i] < N) continue; //인원 확인
            if(p*N > B) continue; //예산 확인
            result = min(result, p * N); //최소 비용 저장
        }
    }

    if(result==MAX) cout << "stay home";
    else cout << result;
    return 0;
}

단순한 구현 문제이다.

각 주의 인원이 총 인원보다 작은 지를 확인하고,

현재 비용에 따른 총비용이 예산을 넘는 지를 확인하고,

위에 2가지 조건을 무사히 통과하면 최소 비용을 저장한다.