演算法實驗四 動態規劃 花生公尺(四)

2021-09-08 13:53:41 字數 1345 閱讀 5054

時限: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 第一次取花生公尺的人只能取一粒,以後取花生公尺的...