【算法实验四】--【动态规划】--花生米(四)

1085.花生米(四)

时限:1000ms 内存限制:10000K  总时限:3000ms

描述

五一长假第四天,Tom逛了N个bbs,做了N^2个脑筋急转弯题,终于发现了每次吃完花生米嘴里都是苦味的原因:自己总会吃到最后一粒花生米。
五一长假第五天,Tom和Jerry在仓库散步的时候发现了n堆花生米(这是什么仓库啊?!)。这次Tom制定分花生米规则如下:
???????1、首先选出最苦的一粒花生米,放到一个瓶子里;
???????2、Tom和Jerry轮流从任意一堆花生米中取出任意粒吃掉;
???????3、如果Tom吃到最后一粒花生米(瓶子里的花生米除外),Jerry必须吃掉瓶子里的花生米;如果Jerry吃到最后一粒花生米(瓶子里的花生米除外),Tom自愿吃掉瓶子里的花生米;
?????? 4、为显示规则的公平性,Jerry可以选择先取或者后取。
Jerry当然希望瓶子里的花生米被Tom吃掉。请计算,Jerry为了达到目的应该先取还是后取。

 

输入

本题有多个测例。
每个测例的输入第一行是一个整数n,n大于零小于等于10,代表花生米的堆数(取出最苦花生米后);接下来n行每行一个不超过100的正整数,分别代表一堆花生米的粒数(取出最苦花生米后)。
n等于0表示输入结束,不需要处理。

 

输出

每个测例在单独的一行内输出一个整数:Jerry先取输出1;Tom先取输出0。

 

输入样例

2
1
1
2
1
100
0

 

输出样例

0
1

解析:这里有 n 堆花生米,只要Jerry吃掉最后一粒花生米,那么Tom就吃瓶子里的。这么说来的话,跟 n 堆有很大关系,我可以一次吃一堆,谁吃到最后一堆谁就是赢家,所以目标是Jerry要吃到最后一堆,即Tom吃完后应该只剩下一堆。

好,经过我一波仔细斟酌,发现我并get不到这道题的解法,然后我发现了一篇超强的博客并且copy了它,大哥对不起,粘上你的博客地址以示尊敬。http://www.cnblogs.com/tanky_woo/archive/2010/08/20/1804464.html,上面详细讲述了各种博弈,实属不可多得的好文章,以下是copy代码(猪不会做猪也很无奈啊):

#include 
using namespace std;
int a[10];
int b[10][7]; //2^7=128>100,7位小够用了
int n;
int change();
void com(int m);
int main()
{
    while(cin>>n&&n)
    {
        for(int i=0;i>a[i];
        for(int i=0;i

 

 

你可能感兴趣的:(算法设计与分析)