回答編集履歴

1

修正方法の追記

2021/02/16 20:46

投稿

actorbug
actorbug

スコア2429

test CHANGED
@@ -9,3 +9,47 @@
9
9
  ここで、`m`が`a.at(i)`より小さいと、`solve`の引数`m`がマイナスになります。
10
10
 
11
11
  そうすると、`solve`の先頭でマイナスのインデックスにアクセスしようとしてエラーになります。
12
+
13
+
14
+
15
+ ---
16
+
17
+ 追記
18
+
19
+
20
+
21
+ `m`がマイナスならメモ化もせずに返るようにすれば修正できます。
22
+
23
+
24
+
25
+ ```diff
26
+
27
+ int solve(int i, int m) {
28
+
29
+ + if(m < 0) return 0;
30
+
31
+ if(dp.at(i).at(m) != -1) return dp.at(i).at(m); // 該当の部分が計算済みならそれを返す
32
+
33
+ ```
34
+
35
+
36
+
37
+ `m`がマイナスの時に`orim`で登録するのは誤りです。
38
+
39
+ 今回のコードだと実行順の関係で問題が発生することはありませんが、
40
+
41
+ `solve(i+1,m-a.at(i),orim)`側を先に呼び出すようになっていたら、正常動作しないパターンが出てきます。
42
+
43
+
44
+
45
+ ```text
46
+
47
+ 2
48
+
49
+ 4 3
50
+
51
+ 1
52
+
53
+ 3
54
+
55
+ ```