HDU 5781 概率DP 找規律

2021-07-29 19:48:55 字數 763 閱讀 7595

有乙個atm機中有[0,k]的存款,每次取x個,如果存款大於等於x,那麼就可以直接取出x,如果不足x,那麼會觸發一次警報,如果觸發警報次數超過上限,就會被警察抓,問在最優策略下,通過盡量少的次數取得所有存款,問期望次數是多少。

一道概率dp,dp[i][j]就表示剩餘i次警報及存款上限為j的情況下的期望,在這種情況下,假設每次取出x元,這時候會有兩種可能:

1.存款大於等於x,這樣就會取出x元,警報次數不變,狀態轉移到dp[i][j-x]

2.要麼存款比x小,這樣不能取出x元,並且會觸發警報,但這時候起碼可以確定存款上限為x-1,狀態轉移到dp[i-1][x-1]

根據全概率公式,可得狀態轉移方程:dp[i][j] = p1*dp[i][j-x] + p2*dp[i-1][x-1] + 1,其中p1和p2也很好求

但是這樣的演算法複雜度為o(k*k*w),會t。

神奇的來了,不知道為什麼別人就想起來找找規律(我想不到),然後發現在w>=10之後數值都不變了,所以我們只要預處理到w=10即可。

#include using namespace std;

const int maxn = 2005;

const int inf = 0x3f3f3f3f;

double dp[maxn][maxn];

int main() }}

int k, w;

while (scanf("%d%d", &k, &w) == 2)

return 0;

}

數學 找規律HDU 1030

題目難點在於找到規律 根據公式求解 從三個角度看這個圖,level,left,right,如下圖,題目的答案就是3個圖上2個點之間的層數的高度差之和。例如 6 12 level 1,left 1,right 1,答案就是3。例如 3 12 level 2,left 1,right 2,答案就是5。i...

hdu1564博弈 找規律

include include include include include include include include include include include include include define pi acos 1 define ll long long define mo...

hdu 5708 博弈找規律

題意 乙個無限大的棋盤,一開始在1,1,有三種移動方式,x 1,y x,y 1 x k,y k 最後走到nm不能走了的人算輸。思路。我們看成一開始在 n,m 往1,1,走,所以自然可以從1,1,開始遞推往出,那麼打表程式就出來了。打出表以後我們觀察到k等於1時稍有特殊,其他則與 min cx,cy ...