1184: PIPI的游戏
博弈论dp
dp为1代表先手赢,否则输
#include <bits/stdc++.h>
using namespace std;
int x,y;
int dp[1010][1010];
int fun(int x,int y){
if(dp[x][y]!=-1){
//cout<<x<<" "<<y<<" "<<dp[x][y]<<endl;
return dp[x][y];}
else{
if(x>0&&y>0){
if(fun(x-1,y)==0||fun(x-1,y-1)==0||fun(x,y-1)==0){
// dp[x][y]=1;
// cout<<x<<" "<<y<<" "<<dp[x][y]<<endl;
return dp[x][y]=1;
}else{
// dp[x][y]=0;
// cout<<x<<" "<<y<<" "<<dp[x][y]<<endl;
return dp[x][y]=0;
}
}else if(x>0){
dp[x][y]=fun(x-1,y)^1;
// cout<<x<<" "<<y<<" "<<dp[x][y]<<endl;
return dp[x][y];
}else if(y>0){
dp[x][y]=fun(x,y-1)^1;
// cout<<x<<" "<<y<<" "<<dp[x][y]<<endl;
return dp[x][y];
}
}
}
int main(){
while(scanf("%d%d",&x,&y)!=EOF){
memset(dp,-1,sizeof(dp));
dp[0][0]=0;
dp[1][0]=1; dp[1][1]=1;
dp[0][1]=1;
if(fun(x,y)){
printf("yes\n");
}
else{
printf("no\n");
}
}
}

浙公网安备 33010602011771号