博弈题 poj 1143
来源:互联网 发布:浙江深孔钻编程招聘 编辑:程序博客网 时间:2024/05/01 09:25
#include <iostream>
#include <cstdio>
#include <memory.h>
using namespace std;
int const max_state = 1<<20;
int const maxn = 20;
int maxD, record[max_state], exp[maxn+1];
bool res[maxn+1];
int num, state;
int dfs(int curstate, int level){
if(curstate == 0)
return false;
bool finalcan = false;
int newstate, i, j, k;
for(i = 0; i <= maxD-1;i++){
if(curstate & exp[i]){
newstate = curstate^exp[i];
for(j = i + 2;j <= maxD;j++){
if((newstate & exp[j-1]) == 0)
continue;
for(k = 2; k <= j/2; k++){
if((newstate & exp[k-1]) == 0 && (newstate & exp[j - k -1]) == 0){
newstate = newstate^exp[j-1];
break;
}
}
}
int t;
t = record[newstate];
bool type;
if(t == 1)
type = true;
else if(t == 2)
type = false;
else type = dfs(newstate, level+1);
if(level == 1){
if(!type){
res[i] = true;
finalcan = true;
if(!record[curstate]) record[curstate] = 1;
}
}
else if(!type){
if(!record[curstate]) record[curstate] = 1;
return true;
}
}
}
if(level == 1){
if(finalcan){
if(!record[curstate]) record[curstate] = 1;
return true;
}
else
{
if(!record[curstate]) record[curstate] = 2;
return false;
}
}
else {
if(!record[curstate]) record[curstate] = 2;
return false;
}
}
int main(){
freopen("input.txt", "r", stdin);
int i, digit, ans = 1;
exp[0] = 1;
for(i = 1; i <= 20;i++)
exp[i] = exp[i-1]*2;
while(scanf("%d", &num)!=EOF){
if(num == 0)
break;
memset(res, false, sizeof(res));
maxD = -1;
state = 0;
for(i = 0; i < num; i++){
scanf("%d", &digit);
if(digit > maxD)
maxD = digit;
state = state|exp[digit-1];
}
bool can = dfs(state, 1
printf("Test Case #%d/n", ans++);
if(!can)
printf("There's no winning move./n");
else
{
printf("The winning moves are:");
for(i = 0 ; i < maxD; i++)
if(res[i])
printf(" %d", i+1);
printf("/n");
}
printf("/n");
}
return 0;
}
- 博弈题 poj 1143
- hdu,poj博弈简单题
- poj博弈
- POJ 2348 欧几德里博弈,博弈好题
- POJ 2484(博弈-对称博弈)
- ACM: 博弈题 poj 1143 状态压缩
- POJ 2484 简单博弈
- POJ-2505(博弈)
- poj 2484 博弈
- poj 1704 阶级博弈
- poj 2348(博弈)
- POJ 2505 乘法博弈
- POJ 1085 博弈-搜索
- POJ 1740 (博弈)
- POJ 1082 (博弈)
- Poj 1082 (博弈)
- POJ 1067 博弈
- POJ 2311 博弈
- 突发的小点子
- 字节传送
- 微软发布12月安全公告预告 补丁6个
- 请你务必认认真真地看完,或许会有那么一天遇到这种情况的
- c#如何获取当前系统所有的字体和颜色?
- 博弈题 poj 1143
- 微软发布12月安全公告预告 补丁6个
- 关于C#函数对象参数传递的问题
- MFC 中创建简单超链接
- [转]ubuntu下交叉编译环境构建(arm-linux-gcc-3.4.1.tar.bz2 )
- 第01章 CORE C++_C++ 基本结构_注释_输出语句_输入语句_初始化_条件控制_ASCII码值_转义字符_常量_变量_类型长度_运算符
- SQL 语言
- sql与hql的区别
- Windows编程之基础概念篇