JZOJ1322 硬幣遊戲

2021-08-03 10:39:16 字數 833 閱讀 5730

第一眼看下去感覺就是博弈,

沒想到正解竟然是dp。

下次見到博弈的題目也應該要往dp方面想一想。

我們知道影響答案的因素只有兩個:當前取到第幾個硬幣、上一次取了多少。

我們設fi,

j 表示取到第i位,上一次取了j個,先手的最優答案。

轉移:考慮這一次要取多少個,列舉乙個k(

1≤k≤

2∗j)

先手肯定可以得到i~i+k-1這一區間的硬幣。

在他取了這k個以後,就變為了對手為先手,取到第i+k位,上一次取了k。

對手也是用最優策略,所以他可以得到的硬幣值為fi

+k,k

也就是說,留給我們的硬幣值就為這一段區間的和減去fi

+k,k

但是,狀態是n2

,轉移是n的,總的複雜度是n3

不過我們發現,在每次列舉k的時候只有最後兩個是有意義的,

所以轉移可以優化到o(1),總的複雜度就是o(

n2) 了

將硬幣值倒過來做會方便一些。

#include 

#include

#include

#include

#include

#include

#define n 2003

using namespace std;

int n,a[n],f[n][n],sum[n];

char ch;

void read(int &n)

int main()

printf("%d",f[n][1]);

}

1381硬幣遊戲

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

1381 硬幣遊戲

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

硬幣遊戲 期望

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