HDU 6558 概率dp(從後往前推導)

2021-10-12 09:53:38 字數 1452 閱讀 4123

vj位址

中文題意:

有乙個苦逼程式設計師小a,他有乙個女朋友b,最近看上了乙個遊戲,他想買這個遊戲,可是小a是乙個怕老婆的人,每個 月的工資都需要上交,小a找他女朋友商量了好久,最後b同意他用每個月的工作獎金來買遊戲,且還需要和b玩智力遊戲,贏了才能去買遊戲,具體情況是這樣的:

步驟1. 先假設小a 贏 小b的機率為 q = 2%

步驟2. 這個月小 a 獲得工作獎金的機率為 p

步驟3. 如果這個月小 a 獲得了工作獎金則轉到步驟 4,否則轉到步驟5

步驟4. 如果小 a 以 q 的勝率贏了小b,小a就可以去買遊戲了,如果沒有贏,則 q = min(100%, q+ 2%),並轉到步驟2

步驟5. 小a 不甘心,使得 q = min(100%,q+1.5%),並轉到步驟2進行下乙個月

那麼請問,當你知道小 a 獲得獎金機率為 p 的情況下,小 a 預期要用幾個月才能買到自己的遊戲(即求 月數 的期望)

思路

概率dp

dp[i]表示在q的概率等於i的時候,a預計要dp[i]個月才能獲勝(既數學期望),那麼當i=100時,dp[i]=1/p;

當小於100時,

因為1.5是小數,不能當下標,所以2,翻倍處理

dp[i]=qi1.0/200.0(贏了)+q(1-i1.0/200.0)(dp[min(i+4,200)]+1)(得了工作獎金但是輸給b)+(1-q)*(dp[min(i+3,200)]+1)(沒有得到工作獎金);

**:

#include

#define lc u << 1

#define rc u << 1 | 1

using

namespace std;

typedef

long

long ll;

typedef

unsigned

long

long ull;

typedef pair<

int,

int> pii;

const

int n =

4e6+10;

const

int inf =

0x3f3f3f3f

;const ll inf =

0x3f3f3f3f3f3f3f3f

;const ll mod =

1e9+7;

const

double eps =

1e-8

;double dp[

210]

;int cc;

void

solve()

printf

("case %d: %.9f\n"

,++cc,dp[4]

);}int

main()

return0;

}

hdu4035 樹上概率dp

從葉子到根,帶入公式求引數 kuangbin hdu 4035 dp求期望的題。題意 有n個房間,由n 1條隧道連通起來,實際上就形成了一棵樹,從結點1出發,開始走,在每個結點i都有3種可能 1.被殺死,回到結點1處 概率為ki 2.找到出口,走出迷宮 概率為ei 3.和該點相連有m條邊,隨機走一條...

hdu 3853 概率dp入門

題意 在一塊r c的棋盤上,從位置 1,1 的地方走到位置為 r,c 的地方,每走一步的代價為2,在位置 i,j 可能會走到位置 i 1,j i,j 1 以及 i,j 題目中給出每個點走向下乙個方向的概率,求花的總代價。分析 一道很基礎的概率dp,dp i j 表示的是從位置 i,j 走到 r,c ...

hdu4336(壯壓DP 概率DP)

需要集齊n張卡片,每買一包零食,裡面可能有不同的卡片,存在每種卡片的概率已知,每包零食最多有一張卡片。問集齊n張的期望。dp i 表示i這個狀態下還需要多少包的期望,dp 1 一開始不會寫,看了別的狀態轉移方程 dp i sum dp i 1 如果想得到一張卡片,期望就是 1 va k 上面的方程和...