문제링크 : https://www.acmicpc.net/problem/1106
1106번: 호텔
첫째 줄에 C와 형택이가 홍보할 수 있는 도시의 개수 N이 주어진다. C는 1,000보다 작거나 같은 자연수이고, N은 20보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 각 도시에서 홍보할 때
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = 987654321;
vector<pii>v;
int dp[100001];
int result = MAX;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int C, N;
cin >> C >> N;
for(int i=0; i<N; i++)
{
int cost, num;
cin >> cost >> num;
v.push_back({cost, num});
}
for(int i=0; i<N; i++)
{
for(int j=0; j<100001; j++)
{
if(j-v[i].first >=0) dp[j] = max(dp[j], dp[j-v[i].first] + v[i].second);
if(dp[j]>=C) result = min(result, j); //최소 비용 저장
}
}
cout << result;
return 0;
}
기본적인 DP 배낭 문제이다.
dp를 선언할때 최대 비용인 1000*100만큼의 크기를 선언해준다.
이후 점화식은 DP 배낭 문제의 기본적인 점화식이고,
그렇게 저장한 dp[j]의 값이 C이상 일때의 최소값을 따로 저장하여 출력해주면 된다.
'백준 > 골드' 카테고리의 다른 글
[백준 2294번] 동전 2 (C++) (0) | 2023.10.14 |
---|---|
[백준 2293번] 동전 1 (C++) (0) | 2023.10.12 |
[백준 9466번] 텀 프로젝트 (C++) (0) | 2023.10.10 |
[백준 2342번] Dance Dance Revolution (C++) (0) | 2023.10.09 |
[백준 2623번] 음악프로그램 (C++) (0) | 2023.10.04 |