時限: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。
輸入樣例21
121100
0輸出樣例01
解析:這裡有 n 堆花生公尺,只要jerry吃掉最後一粒花生公尺,那麼tom就吃瓶子裡的。這麼說來的話,跟 n 堆有很大關係,我可以一次吃一堆,誰吃到最後一堆誰就是贏家,所以目標是jerry要吃到最後一堆,即tom吃完後應該只剩下一堆。
好,經過我一波仔細斟酌,發現我並get不到這道題的解法,然後我發現了一篇超強的部落格並且copy了它,大哥對不起,粘上你的部落格位址以示尊敬。上面詳細講述了各種博弈,實屬不可多得的好文章,以下是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()
for(int i=0;icom(i);
cout<}
return 0;
}int change()
if(flag==1)
break; //一旦找到flag=1,證明第i位上有奇數個1,就退出迴圈
}return flag;
}void com(int m)
}
演算法實驗四 (DP 動態規劃) 花生公尺3
時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述五一長假第三天,tom和jerry在倉庫散步的時候又發現了一堆花生公尺 倉庫,又見倉庫 這次tom制定分花生公尺規則如下 1 tom和jerry輪流從堆中取出k粒花生公尺吃掉 2 第一次取花生公尺的人只能取一粒,以後取花生公尺的...
演算法實驗四 (DP 動態規劃) 花生公尺4
時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述五一長假第四天,tom逛了n個bbs,做了n 2個腦筋急轉彎題,終於發現了每次吃完花生公尺嘴裡都是苦味的原因 自己總會吃到最後一粒花生公尺。五一長假第五天,tom和jerry在倉庫散步的時候發現了n堆花生公尺 這是什麼倉庫啊?這...
NOJ1084 演算法實驗四 花生公尺(三)
時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述五一長假第三天,tom和jerry在倉庫散步的時候又發現了一堆花生公尺 倉庫,又見倉庫 這次tom制定分花生公尺規則如下 1 tom和jerry輪流從堆中取出k粒花生公尺吃掉 2 第一次取花生公尺的人只能取一粒,以後取花生公尺的...