10404:Bachet's Game
問題文
http://uva.onlinejudge.org/external/104/10404.html
StanとOllieが石をnum[ i ]個ずつ取っていって最後のひとつを取ったほうが勝ち。どちらが勝つか判定せよ。
蟻本4-2章そのまま。
解きなおした。
dp[ 残っている石の個数 ] := 勝敗
dp[ 0 ] = 負け
dp[ i ] = !dp[ i - num[ j ] ]
#include<iostream> #include<vector> #include<algorithm> using namespace std; int main(void){ int n,m; while(cin >> n >> m){ vector<int>num(m); for(int i=0;i<m;i++)cin >> num[i]; bool dp[1000001]; fill(dp,dp+1000001,false); for(int i=1;i<=n;i++) for(int j=0;j<m;j++) dp[i]|= num[j]<=i && !dp[i-num[j]]; if(dp[n])cout << "Stan wins" << endl; else cout << "Ollie wins" << endl; } return 0; }