zoj 3057 Beans Game 博弈论
思路:三维DP,刚开始用记忆化搜索,MLE……
后来改为直接预处理所有的情况。
总之就是必败态的后继是必胜态!!!
代码如下:
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<algorithm> 5 #include<cstring> 6 #include<set> 7 #include<vector> 8 #define ll long long 9 #define M 302 10 #define inf 1e10 11 #define mod 1000000007 12 using namespace std; 13 bool dp[M][M][M]; 14 int main() 15 { 16 int a,b,c,t; 17 memset(dp,0,sizeof(dp)); 18 for(int i=0;i<=300;i++) 19 for(int j=0;j<=300;j++) 20 for(int k=0;k<=300;k++){ 21 if(!dp[i][j][k]){ 22 for(t=1;t+i<=300;t++) 23 dp[i+t][j][k]=1; 24 for(t=1;t+j<=300;t++) 25 dp[i][j+t][k]=1; 26 for(t=1;t+k<=300;t++) 27 dp[i][j][k+t]=1; 28 for(t=1;t+i<=300&&t+j<=300;t++) 29 dp[i+t][j+t][k]=1; 30 for(t=1;t+i<=300&&t+k<=300;t++) 31 dp[i+t][j][k+t]=1; 32 for(t=1;t+j<=300&&t+k<=300;t++) 33 dp[i][j+t][k+t]=1; 34 } 35 } 36 while(scanf("%d%d%d",&a,&b,&c)!=EOF){ 37 printf("%d\n",dp[a][b][c]); 38 } 39 return 0; 40 }