前提・実現したいこと
ABC015のD問題が一部のケースでACになりません。方針としてはdp[i][j][k]をi - 1枚目までのスクショを考慮し、幅がj以下で使用枚数がk以下の時の最大の価値としたのですが、どこに誤りがあるのかわかりません。何卒ご教授のほどよろしくお願いします。
該当のソースコード
C++
1#include <bits/stdc++.h> 2using namespace std; 3typedef long long ll; 4typedef long double ld; 5const int INF = INT_MAX; 6 7 8template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; } 9template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; } 10const int MAX_N = 60, MAX_W = 10100; 11const int MAX_K = 60; 12int dp[MAX_N][MAX_W][MAX_K]; 13int main() 14{ 15 ios::sync_with_stdio(false); 16 cin.tie(0); 17 int W, N, K; cin >> W >> N >> K; 18 int a[N], b[N]; for(int i = 0; i < N; ++i) cin >> a[i] >> b[i]; 19 for(int i = 0; i < N; ++i){ 20 for(int sum_w = 0; sum_w <= W; ++sum_w){ 21 for(int j = 0 ; j <= K; j++){ 22 if(sum_w >= a[i] ){ 23 chmax(dp[i + 1][sum_w][j + 1], dp[i][sum_w - a[i]][j] + b[i]); 24 } 25 chmax(dp[i + 1][sum_w][j + 1], dp[i][sum_w][j]); 26 } 27 } 28 } 29 int res = 0; 30 for(int i = 0; i <= N; i++){ 31 for(int j = 0; j <= W; ++j){ 32 for(int k = 0; k <= K; ++k){ 33 chmax(res, dp[i][j][k]); 34 } 35 } 36 } 37 cout << res << endl; 38 39 40} 41
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/27 03:43
2020/11/27 04:44
2020/11/29 15:20