ACM之博弈论总结
来源:互联网 发布:汇智线切割软件 编辑:程序博客网 时间:2024/05/03 05:54
现在自己做 博弈论的题目也做了很长时间了,自己把自己做过的题目和感觉常出现的类型总结一下。
1.巴十博弈
这个是最基本的博弈类型。
公式很简单,n%(m+1)==0?LOST:WIN
变式:最少取p个,最多去q ,
if(n%(p+q)==0) printf("WIN\n"); else if(n%(p+q)<=p) printf("LOST\n"); else if(n%(p+q)>p) printf("WIN\n");
2.威佐夫博弈
每个T态是可以求出来的,用公式
if(a>b) a=a^b^(b=a); double temp=double(b-a)/2.0*(sqrt(5)+1); if(a==int(temp)) printf("0\n"); else printf("1\n");
3.Nimm
异或为0是必败态
变式:anti_Nimm
int n; cin>>n; int num=0; int num1=0; int num2=0; while(n--) { int t; cin>>t; num^=t; if(t==1) num1++; else num2++; } if(num&&num2) //S2,S1态,必胜 cout<<"John"<<endl; else if(!num2&&!num1%2) //T0态必胜 cout<<"John"<<endl; else cout<<"Brother"<<endl;
变式:阶梯博弈
//poj 1704阶梯博弈化为nimm#include<iostream>#include<cmath>#include<cstring>#include<cstdio>#include<fstream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>const int MAX=0xfffffff;using namespace std;int a[1010];int main( ){ //freopen("1.txt","r",stdin); int t; while(cin>>t) { while(t--) { int n; cin>>n; for(int i=0;i<n;i++) { cin>>a[i]; } sort(a,a+n); //初始数据没有排序trick1 int sum=0; a[-1]=0; for(int i=n-1;i>=0;i-=2) //倒着取奇数,不知道为什么 sum^=a[i]-a[i-1]-1; if(sum) cout<<"Georgia will win"<<endl; else cout<<"Bob will win"<<endl; } } return 0;}
0 0
- ACM之博弈论总结
- ACM博弈论知识总结
- ACM博弈论总结
- ACM博弈论总结
- 关于ACM博弈论的总结1
- acm 博弈论 总结 + 证明(侵删)
- ACM博弈论
- 博弈论 acm
- 博弈论总结
- 博弈论总结!
- 博弈论总结
- 博弈论总结
- 博弈论总结
- 博弈论总结
- 博弈论总结
- 博弈论总结
- 博弈论 总结
- 博弈论总结
- 美魔女你们呢美女美女美女们美女美女
- java nio 之MappedByteBuffer,高效文件/内存映射
- Block变量的的用法,使你的程序看起来清晰明了!
- caffe实践程序1——mnist任务总结
- JAVA实现MD5加密的简单代码demo
- ACM之博弈论总结
- 京沪高姐高交会馆和规范和官方合富辉煌
- Error inflating class android.support.v4.view.ViewPager 问题的解决方法
- 属性与点语法
- python写递归出现的错误
- 更符合法规和法规和夫人突然有人统一
- Mark
- 使用管道实现linux C++ 线程通信
- 初识MongoDB