盒中有n个小球,A,B两人轮流取。约定:每个人从盒中取的球数必须是1,3,7,8。A、B轮流取球,直到取完。拿到最后一个球就算输。
A先手,给定球数,在两人都不失误时,判断A最终是否能赢?球数 < 10000.
刚看到这道题,突然想到一个BGM buttercup。取最后一个球的倒霉蛋拿到球是多么绝望o(╥﹏╥)o。动态规划,想办法让剩下的球朝着向自己有利的方向发展。
#include<vector>
int main()
{
vector<int> dp(10000, 0);
dp[2] = 1;
dp[4] = 1;
dp[6] = 1;
dp[8] = 1;
for (int i = 9; i < 10000; ++i) {
if (dp[i - 1] == 0 || dp[i - 3] == 0 || dp[i - 7] == 0 || dp[i - 8] == 0) {
dp[i] = 1;
} else {
dp[i] = 0;
}
}
int n;
cin >> n;
for (int i = 0; i < n; ++i) {
int ballNum;
cin >> ballNum;
cout << dp[ballNum] << endl;
}
return 0;
}