我在一個令我困惑的TopCoder解決方案中遇到了這段代碼。有一個正整數和正整數的數組列表。我認爲它返回的總和是模數MOD的子集數。我相信MOD只是爲了避免溢出,如果列表很大,所以如果你保持數字少於32,那麼我認爲你不需要它。這段代碼如何計算一組正整數的所有子集的總和是偶數?
ArrayList l = { ... positive even and odd integers ... };
int dp[] = {1,0};
for (int i = 0; i < l.size(); ++i) {
int even = dp[0];
int odd = dp[1];
if (l.get(i) % 2 == 0) {
even *= 2;
odd *= 2;
} else {
even += odd;
odd = even;
}
dp[0] = even % MOD;
dp[1] = odd % MOD;
}
return (dp[0] - 1 + MOD) % MOD;
如果所有整數都是偶數,那麼我認爲答案是2^N-1。 但似乎如果有至少一個奇數整數,答案變成2 ^(N-1)-1。是對的嗎?如果是這樣,爲什麼跟蹤偶數/奇數?