POJ 2068

就是必胜点与必败点的计算而已。计算每一种情况。设st[i][j]为在第i个人剩下j个石头时的情况,拿它转移后的情况比较。可以到达必败点,则当前为必胜点。若只能到达必胜点,则当前点为必败点。

 1 #include <iostream>
2 #include <cstdio>
3 using namespace std;
4 const int S=8330;
5 const int N=22;
6
7 int st[N][S];
8 int s,n;
9 int MA[N];
10
11 int main(){
12 int k,i,j;
13 while(scanf("%d",&k)!=EOF){
14 if(!k) break;
15 scanf("%d",&s);
16 n=2*k;
17 for(i=1;i<=n;i++)
18 scanf("%d",&MA[i]);
19 for(i=1;i<=n;i++)
20 st[i][0]=1;
21 for(j=1;j<=s;j++){
22 for(i=1;i<=n;i++){
23 st[i][j]=0;
24 if(i==n){
25 for(k=1;k<=MA[i];k++){
26 if(j-k>=0){
27 if(st[1][j-k]==0){
28 st[i][j]=1;
29 break;
30 }
31 }
32 else break;
33 }
34 }
35 else{
36 for(k=1;k<=MA[i];k++)
37 if(j-k>=0){
38 if(st[i+1][j-k]==0){
39 st[i][j]=1;
40 break;
41 }
42 }
43 else break;
44 }
45 }
46 }
47 printf("%d\n",st[1][s]);
48 }
49 return 0;
50 }

POJ 2068,布布扣,bubuko.com

时间: 2024-12-15 05:17:42

POJ 2068的相关文章

POJ 2068 Nim#双人dp博弈

http://poj.org/problem?id=2068 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int dp[25][(1<<13)+5];//dp[i][j]表示轮到第i个人取时,剩j个石头 int n,s,m[25]; int DFS(int pos,int remain) { if(dp

POJ 2068 Nim

链接: http://poj.org/problem?id=2068 题意: 传统的Nim游戏由两名玩家进行,在一堆石头中,双方轮流取走任意合法数量块石头,取走最后一块石头的玩家落败. 多人Nim游戏将参赛人数拓展至两个队伍,每支队伍有n名队员交错入座,单次分别能最多取走Mi块石头,取走S块石头中的最后一块的队伍失败, 求第一支队伍是否有必胜策略? 题解: dp[i][j]表示第i个人取,还有j块石头 . 当j为0的时候,没有石头,这时候是胜,为1. 后继中有必败态的为必胜态. 代码: 31 i

poj 2068 Nim(博弈dp)

Nim Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 1403   Accepted: 791 Description Let's play a traditional game Nim. You and I are seated across a table and we have a hundred stones on the table (we know the number of stones exactly).

POJ 2068 Nim 组合游戏

题目大意:有一堆石子,两伙人,围在一起坐,坐的顺序是ABABABAB....每一个人最多能取a[i]个石子,取走最后一个石子的就输了.问谁能赢. 思路:朴素的组合游戏判定问题,这个题给了数据范围,可以进行记忆化搜索.f[i][j]为还剩下i个石子,到了第j个人的时候的状态,然后记忆化一下. CODE: #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #

(博弈DP) poj 2068

Nim Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 1362   Accepted: 762 Description Let's play a traditional game Nim. You and I are seated across a table and we have a hundred stones on the table (we know the number of stones exactly).

POJ 2068 Nim (dp博弈)

题意: 共n轮,s个石头和两队人,两队人轮流拿,第i轮两队分别只能拿1~M[(2*i-1)%(2*n)]和1~M[(2*i)%(2*n)]个石头,拿到最后那个石头的队输: 就拿最后一组样例来说,循环中共3轮,共97个石头,第一轮两队分别拿不超过8个和7个石头,第二轮6个和5个,第三轮4个和3个,然后又是8个和7个...... Input n S M[1]  M[2] . . . M[2*n] 1 <= n <= 10, 1 <= Mi <= 16, and 1 <= S &l

POJ【数论/组合/博弈论】

 POJ[数论/组合/博弈论]题目列表 POJ[数论/组合/博弈论]题目列表 原来的列表比较水,今天换了一个难一些的列表,重新开始做~ 红色的代表已经AC过,蓝色的代表做了但是还没过.这句话貌似在我空间里的每份列表里都有额. 博弈论 POJ 2234 Matches Game POJ 2975 Nim POJ 2505 A multiplication game POJ 1067 取石子游戏 POJ 2484 A Funny Game POJ 2425 A Chess Game POJ 29

Part.4【博弈论】

---恢复内容开始--- 不要问我为什么突然跳到Part.4,我懒得解释. 在蔡大神的论文+讲解和HZW的题库下,自己大概是明白什么是博弈论的皮毛了吧. 先说SG定理吧. 对于游戏中的状态,我们给每个状态定义一个必胜态和必败态.区别在于前者可以通过一次操作到达必败态,但后者无法做到(后者在一次操作后所能到达的状态全部都为必胜态) 接着引进SG函数,每个状态都有一个SG值,这个值由它所能到达的状态的SG值决定.(这里的所能到达的状态指的是经过一次操作能到达的状态,下同) SG值有以下性质: SG值

(转载)--SG函数和SG定理【详解】

在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜点和必败点的概念: P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败. N点:必胜点,处于此情况下,双方操作均正确的情况下必胜. 必胜点和必败点的性质: 1.所有终结点是 必败点 P .(我们以此为基本前提进行推理,换句话说,我们以此为假设) 2.从任何必胜点N 操作,至少有一种方式可以进入必败点 P. 3.无论如何操作,必败点P 都只能进入 必胜点 N. 我们研究必胜点和必败点的目的时间为题进行简化,有助于