回答編集履歴
2
修正
test
CHANGED
@@ -40,7 +40,7 @@
|
|
40
40
|
|
41
41
|
dp[i + 1][j + x[i]][k + 1] += dp[i][j][k]; //x[i]を取った場合
|
42
42
|
|
43
|
-
dp[i + 1][j][k] = dp[i][j][k]; //x[i]を取らなかった場合
|
43
|
+
dp[i + 1][j][k] += dp[i][j][k]; //x[i]を取らなかった場合
|
44
44
|
|
45
45
|
}
|
46
46
|
|
1
修正
test
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
dp[1][0][0]=1,dp[1][1][3]=1となり、それ以外のdp[1][j][k]は0のままになります。
|
6
6
|
|
7
|
-
ところが、i=0のループではk=0しか取れないため、forの中でelseにしか入れません。
|
7
|
+
ところが、質問者のロジックでは**i=0のループではk=0しか取れない**ため、forの中でelseにしか入れません。
|
8
8
|
|
9
9
|
そのため、dp[1][j][k]はdp[0][j][k]をそのままコピー、つまりdp[1][0][0]=1以外が0になってしまいます。
|
10
10
|
|
@@ -14,11 +14,11 @@
|
|
14
14
|
|
15
15
|
|
16
16
|
|
17
|
-
と考えたことにあります。iは正しくは「今現在考慮している番号」で、kは「そこまでで実際に取ろうとしているカード枚数」になります。iが0始まりである関係上、kの最大値はi+1になります。
|
17
|
+
と考えたことにあります。iは正しくは「今現在考慮している番号」で、kは「そこまでで実際に取ろうとしているカード枚数」になります。iが0始まりである関係上、**kの最大値はi+1**になります。上記理由のため、「そこまでのカードすべて取る」などが実現不可能になっています。
|
18
18
|
|
19
19
|
### 質問2への回答
|
20
20
|
|
21
|
-
Aがカードの平均値以上であれば問題ありませんが、カード平均値未満である場合、sum/Aがカード枚数Nを超える可能性があります。その場合、範囲外アクセスをしてしま
|
21
|
+
Aがカードの平均値以上であれば問題ありませんが、カード平均値未満である場合、sum/Aがカード枚数Nを超える可能性があります。その場合、範囲外アクセスをしてしまう可能性があります。
|
22
22
|
|
23
23
|
|
24
24
|
|