[백준 7579] 앱
-
문제 : 7579 앱
-
유형 : DP
-
아이디어 : 배낭문제와 유사하지만 최대 메모리가 1e7이기 때문에 dp테이블을 메모리로 잡으면 풀 수가 없다. 그렇기 때문에 비용에 따라서 가질 수 있는 최대 메모리를 구해서 M보다 큰 경우중 비용이 가장 작은 것을 찾는 방식으로 풀어야 한다.
-
풀이 : dp 테이블은 i비용까지 사용했을 때 최대 메모리로 설정하였고 점화식은
dp[i] = max(dp[i], dp[i-cost[j]] + memory[j])
바텀업 방식으로 진행하면 이전 인덱스의 변화가 다음 인덱스에 영향을 주기 때문에 탑다운으로 진행한다
그리고 최대 메모리값들 중 M을 넘는 것들 중 최소 비용을 구한다.
- 코드
#include <bits/stdc++.h>
const int dx[4] = { 1,0,-1,0 };
const int dy[4] = { 0,-1,0,1 };
using namespace std;
int n, m;
pair<int, int > arr[101];
int dp[10001];
int main() {
cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(false);
cin >> n >> m;
for (int i = 1; i <= n; i++) cin >> arr[i].first;
for (int i = 1; i <= n; i++) cin >> arr[i].second;
for (int i = 1; i <= n; i++) {
for (int j = 10000; j >= arr[i].second; j--) {
dp[j] = max(dp[j], dp[j - arr[i].second] + arr[i].first);
}
}
int ans = 0;
int M = 1e9;
for (int i = 0; i <= 10000; i++) {
if (dp[i] >= m && M > dp[i]) {
ans = i;
M = dp[i];
}
}
cout << ans;
return 0;
}
Author And Source
이 문제에 관하여([백준 7579] 앱), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@asdsa2134/백준-7579-앱저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)