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
",dp[a][b][c]);
38     }
39     return 0;
40 }
View Code
原文地址:https://www.cnblogs.com/xin-hua/p/3343590.html