호텔 C++ - 백준 1106

김관중·2024년 2월 27일
0

백준

목록 보기
64/129

https://www.acmicpc.net/problem/1106

dp 문제.

범위 체크, 다른 도시여도 같은 지불값이 들어올 수 있다는 것을

인지해야 되는 문제.

문제 접근

c의 범위가 1000이하의 자연수이고,

고객 유치 가격과 얻는 고객의 수가 100이하 자연수이기 때문에,

최대 100000원을 지불해야 가능한 경우가 있다.

이 점을 유의하여 가격을 1~100000원까지 지불하는 경우를 탐색하여

가능한지 확인하고, 가능하다면 고객의 수를 더해주었다.

코드는 다음과 같다.

#include <bits/stdc++.h>
using namespace std;

int main(){
    ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
    int c,n,ans=0; cin >> c >> n;
    pair<int, int> arr[20];
    int dp[100001]; fill(dp+1,dp+100001,0);
    for(int i=0;i<n;i++){cin >> arr[i].first >> arr[i].second;dp[arr[i].first]=max(dp[arr[i].first],arr[i].second);}
    for(int i=1;i<=100000;i++){
        for(int j=0;j<n;j++) if(i-arr[j].first>0 && dp[i-arr[j].first]>0) dp[i]=max(dp[i],dp[i-arr[j].first]+arr[j].second);
        if(dp[i]>=c){ans=i;break;}
    }
    cout << ans;
    return 0;
}
profile
꾸준히 학습하기

0개의 댓글

관련 채용 정보