概述
1.https://www.acwing.com/problem/content/893/
题目:给定n堆石子,两位玩家轮流操作,每次操作可以从任意一堆石子中拿走任意数量的石子(可以拿完,但不能不拿),最后无法进行操作的人视为失败。问如果两人都采用最优策略,先手是否必胜。
思路:
必胜状态(a1^ a2 …^an!=0):可以走到某一个必败状态
必败状态(a1^ a2 …^an==0):走不到任何一个必败状态
证明(参考算法进阶指南):
- (a1^ a2 …^an!=0)可以走到某一个必败状态
- (a1^ a2 …^an==0)走不到任何一个必败状态
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
int ans=0;
for(int i=1;i<=n;i++)
{
int x;
scanf("%d",&x);
ans^=x;
}
if(ans) printf("Yesn");
else printf("Non");
}
最后
以上就是简单钢笔为你收集整理的Nim博弈(博弈论)的全部内容,希望文章能够帮你解决Nim博弈(博弈论)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复