私は困惑する 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 となるようです。そうですか?もしそうなら、なぜ偶数/奇数を追跡するのですか?