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");
		}
	}
}
posted @ 2026-03-25 13:23  peter_shen  阅读(4)  评论(0)    收藏  举报