Submission #67912
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | #include<bits/stdc++.h> using namespace std; int main(){ int n,w; cin >> n >> w; vector<vector< int >> judge(n+10,vector< int >(10010,0)); // 添字で重さを表現するために配列の要素を、最大の重さ分用意する。 vector< int > cost(n); vector< int > weight(n); // 重さとコストを管理し易いように、別別の配列を確保しておく for ( int i=0;i<n;i++){ cin >> cost[i] >> weight[i]; } for ( int i = 0;i < n;i++){ //見る商品が、何個まで選べるかを指定する添字 // 直前までの配列に、仮定の最大値を格納してあるため、その値を引用する。 for ( int j = 0;j <= w;j++){ if (weight[i]<=j){ // 今見たい重さが、許容される重さであるかどうか(1ループ内で、何度も許容される重さが繰り返されるためOK) judge[i+1][j] = max(judge[i][j],judge[i][j - weight[i]] + cost[i]); // 次に遷移する先の値を決めようとしている。 // 値の更新がなければ、最大が決まっている現在地点のコストを持ってくる。 // 値の更新があれば、今見ている重さの分のコストを最大値として持ってきたい。 // | // +-> ?なぜ重さを示す添字がいま見ている商品の重さを引いているのか? // | +-> A, 今見ている商品型されたという結果に変えたい。 // | 従って、現在の重さを足す前の合計コストから持ってこなければ、 // | シュミレーション対象ではない値が足されてしまう。 // +-> ?コストを更新するためとはいえ、重さの添字から、対象商品の重さを引いてしまうと、正確な値が反映されないのでは? // +-> 解釈1.このDPは、全シュミレートを行うため、全パターン見ているからヨシ! // +-> 解釈2.そもそも、値の更新があったということは、新しい商品を詰もうとしている!直前までの最大コストと比べて // 値の更新というアクションを起こそうというのであれば、それはつまりこの商品を足した方が、直前までで // 今の重さよりも小さい商品を足した時のコストの合計よりも、この商品の方が相応しい商品であるということ! /* --< ! ForExample ! >-- +----------------------------------------------------------+ コスト| 01 03 05 07 12 36 37 38 39 40 44 45 45 45 45 45 45 45 45 |-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. 重さ | 01 02 03 04 05 06 07 08 09 10 11 12 12 12 12 12 12 12 12 +----------------------------------------------------------+ この↑の場合は重さが12の場合でコストが頭打ちになってしまった場合。 では、ここに13個めの商品として重さ2がのコストが54の偉大な商品をラインナップに加えてみる。 すると、 +-----値を遷移するために見た場所がここ! | +=====ほらっ!値がしっかり最大値になっている。 | | v v +----------------------------------------------------------+ コスト| 01 03 05 07 12 36 37 38 39 40 44 45 45 45 99 99 99 99 99 |-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. 重さ | 01 02 03 04 05 06 07 08 09 10 11 12 12 12 15 15 15 15 15 +----------------------------------------------------------+ このように、値が崩れることはありません(違っていたらすいません。納得させるために、分かり易いパターンを選択しました。) */ } else { judge[i+1][j] = judge[i][j]; } } } cout << judge[n][w] << endl; return (0); } |
ステータス
項目 | データ |
---|---|
問題 | 0238 - ナップザック問題(Easy) |
ユーザー名 | <span style="color:#000000;font-weight:bold;">ei2031</span> |
投稿日時 | 2021-08-03 14:00:55 |
言語 | C++17 |
状態 | Accepted |
得点 | 3 |
ソースコード長 | 4023 Byte |
最大実行時間 | 31 ms |
最大メモリ使用量 | 5024 KB |
セット
セット | 得点 | Cases | |
---|---|---|---|
1 | ALL | 3 / 3 | * |
テストケース
ファイル名 | 状態 | 実行時間 | メモリ使用量 | # |
---|---|---|---|---|
DPL_1_B_in1.txt | AC | 23 ms | 1116 KB |
1
|
DPL_1_B_in2.txt | AC | 18 ms | 992 KB |
1
|
DPL_1_B_in3.txt | AC | 28 ms | 1244 KB |
1
|
DPL_1_B_in4.txt | AC | 22 ms | 1216 KB |
1
|
DPL_1_B_in5.txt | AC | 18 ms | 1196 KB |
1
|
DPL_1_B_in6.txt | AC | 18 ms | 1176 KB |
1
|
DPL_1_B_in7.txt | AC | 21 ms | 1804 KB |
1
|
DPL_1_B_in8.txt | AC | 23 ms | 1840 KB |
1
|
DPL_1_B_in9.txt | AC | 20 ms | 1876 KB |
1
|
DPL_1_B_in10.txt | AC | 15 ms | 1784 KB |
1
|
DPL_1_B_in11.txt | AC | 23 ms | 1568 KB |
1
|
DPL_1_B_in12.txt | AC | 19 ms | 1604 KB |
1
|
DPL_1_B_in13.txt | AC | 20 ms | 1768 KB |
1
|
DPL_1_B_in14.txt | AC | 21 ms | 1932 KB |
1
|
DPL_1_B_in15.txt | AC | 23 ms | 1908 KB |
1
|
DPL_1_B_in16.txt | AC | 21 ms | 1876 KB |
1
|
DPL_1_B_in17.txt | AC | 17 ms | 952 KB |
1
|
DPL_1_B_in18.txt | AC | 27 ms | 1348 KB |
1
|
DPL_1_B_in19.txt | AC | 24 ms | 1136 KB |
1
|
DPL_1_B_in20.txt | AC | 19 ms | 1352 KB |
1
|
DPL_1_B_in21.txt | AC | 23 ms | 2932 KB |
1
|
DPL_1_B_in22.txt | AC | 17 ms | 2956 KB |
1
|
DPL_1_B_in23.txt | AC | 22 ms | 2848 KB |
1
|
DPL_1_B_in24.txt | AC | 21 ms | 2868 KB |
1
|
DPL_1_B_in25.txt | AC | 19 ms | 4928 KB |
1
|
DPL_1_B_in26.txt | AC | 21 ms | 4904 KB |
1
|
DPL_1_B_in27.txt | AC | 25 ms | 5012 KB |
1
|
DPL_1_B_in28.txt | AC | 19 ms | 4864 KB |
1
|
DPL_1_B_in29.txt | AC | 31 ms | 4848 KB |
1
|
DPL_1_B_in30.txt | AC | 29 ms | 4812 KB |
1
|
DPL_1_B_in31.txt | AC | 25 ms | 4916 KB |
1
|
DPL_1_B_in32.txt | AC | 23 ms | 5024 KB |
1
|
DPL_1_B_in33.txt | AC | 26 ms | 5000 KB |
1
|
DPL_1_B_in34.txt | AC | 23 ms | 4856 KB |
1
|
DPL_1_B_in35.txt | AC | 28 ms | 4960 KB |
1
|
DPL_1_B_in36.txt | AC | 27 ms | 4944 KB |
1
|