4 1 1 硬幣遊戲

2022-06-19 14:27:07 字數 826 閱讀 2241

problem description:

a和b玩乙個這樣的遊戲,給定k個數字a1,a2,……ak。現有x個硬幣,a和b輪流取硬幣,每次取的硬幣數量只能是這k個數字當中。當a先取,取走最後一枚硬幣的一方獲勝。當雙方都採取最佳策略時,誰會獲勝?假定k個數字中一定有1。

1<=x<=1000;

1<=k<=100;

1<=ai<=x;

inout:

9 21 4

output:

a下面考慮輪到自己時還剩下j枚硬幣的情況:

(1)題目規定取光硬幣的一方獲勝,那麼當輪到自己時沒有硬幣就失敗了。因此j=0時,為必敗態;

(2)對於某個 j(1<=j<=x)來說,當 j - ai 是必敗態的時候,j 就是必勝態。(如果當前有 j 枚硬幣,只要取走 ai 枚硬幣對手就必敗->自己必勝);

(3)對於某個 j(1<=j<=x)來說,當 j - ai 是必勝態的時候,j 就是必敗態。(無論自己怎麼取,對手都必勝->自己必敗);

根據這些規則,我們就能利用動態規劃按照j從小到大的順序計算出必勝態和必敗態,只要看x是必勝態還是必敗態,就知道誰獲勝了。

像這樣,考慮各個狀態的勝負條件,判斷必勝態還是必敗態,是有勝敗遊戲的基礎。

//

輸入int

x,k,a[max_k];

//動態規劃所用陣列

bool win[max_k+1

];void

solve()

if(win[x]) puts("a"

);

else puts("b"

); }

view code

1381硬幣遊戲

基準時間限制 1 秒 空間限制 131072 kb 分值 5 難度 1級演算法題 有乙個簡單但是很有趣的遊戲。在這個遊戲中有乙個硬幣還有一張桌子,這張桌子上有很多平行線 如下圖所示 兩條相鄰平行線之間的距離是1,硬幣的半徑是r,然後我們來拋硬幣到桌子上,拋下之後硬幣有時候會和一些直線相交 相切的情況...

1381 硬幣遊戲

1381 硬幣遊戲 基準時間限制 1 秒 空間限制 131072 kb 分值 5 難度 1級演算法題 有乙個簡單但是很有趣的遊戲。在這個遊戲中有乙個硬幣還有一張桌子,這張桌子上有很多平行線 如下圖所示 兩條相鄰平行線之間的距離是1,硬幣的半徑是r,然後我們來拋硬幣到桌子上,拋下之後硬幣有時候會和一些...

硬幣遊戲 期望

有乙個簡單但是很有趣的遊戲。在這個遊戲中有乙個硬幣還有一張桌子,這張桌子上有很多平行線 如下圖所示 兩條相鄰平行線之間的距離是1,硬幣的半徑是r,然後我們來拋硬幣到桌子上,拋下之後硬幣有時候會和一些直線相交 相切的情況也算是相交 有時候不會。請你來計算一下拋一次硬幣之後,該硬幣和直線相交數目的期望。...