🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C++11

C++11は2011年に容認されたC++のISO標準です。以前のC++03に代わるもので、中枢の言語の変更・修正、標準ライブラリの拡張・改善を加えたものです。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

1032閲覧

AtCoderのABC015_D問題でWAになる

rdld036

総合スコア16

C++11

C++11は2011年に容認されたC++のISO標準です。以前のC++03に代わるもので、中枢の言語の変更・修正、標準ライブラリの拡張・改善を加えたものです。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/11/26 09:27

編集2020/11/26 12:34

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Text

13 23 2 31 10 410 10 51 10 6=> 10

正しい答えは20です

投稿2020/11/27 03:20

yudedako67

総合スコア2047

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rdld036

2020/11/27 03:43

具体的な反例をあげてくださりありがとうございます。私の質問文が曖昧でしたが、私のコードのどの部分に誤りまたは不足があるのか教えていただけますか。
yudedako67

2020/11/27 04:44

スクリーンショットを使わない場合が正しく考慮されていません
rdld036

2020/11/29 15:20

確かにdpの添字はj + 1ではなく、単にjでよかったですね。ご指摘していただきありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問