poj 炸了….過個把星期才能好…先刷一下hdu上的題
期望dp
這一類題,簡單的說就是求期望。
一般都是從後往前推,因為最後的狀態和值我們知道…
通過例題來了解~
loops hdu - 3853
題意:求從(1,1)走到(r,c)的期望,每個位置有三個選擇,原地不動,向右走,向下走,概率分別是(c1,c2,c3)。
分析:
dp[r][c]=0;
dp[i][j]=c1*dp[i][j]+c2*dp[i][j+1]+c3*dp[i+1][j]
遞推是由已知推未知,右邊的dp[i][j]未知,轉移到左邊
dp[i][j]=(c2*dp[i][j+1]+c3*dp[i+1][j])/(1-c1);
然後從後往前推就行了,這裡注意分母不能是0,特判一下1-c1為0的情況
#include
#include
#include
#include
#include
using namespace std;
#define ll long long
#define mem(a,b) memset(a,b,sizeof(a))
const int maxn = 1e3+10;
double c1[maxn][maxn],c2[maxn][maxn],c3[maxn][maxn],dp[maxn][maxn];
int main()
dp[i][j]=(c2[i][j]*dp[i][j+1]+c3[i][j]*dp[i+1][j]+2)/(1.0-c1[i][j]);
}printf("%.3f\n",dp[1][1]);
}return 0;
}
aeroplane chess hdu - 4405
題意:一種遊戲,在一維座標中,從0點出發,每次都會搖股子,有1,2,3,4,5,6這幾種,搖到哪個就前進幾個整點,比如x點,搖到了2點,就到了x+2點上。
其中還有幾個飛行航線,比如(x,y)意思就是在x點可以直接跳到y點,不用搖股子。到n點,或者大於n點就算贏,問贏的期望。
分析:和大富翁遊戲是不是有點像~
如果沒有飛行航線的話,那麼就和上面題目一樣了,狀態方程為:
dp[i]=(1.0/6.0)*(dp[i+1]+dp[i+2]+dp[i+3]+dp[i+4]+dp[i+5]+dp[i+6])+1.0;
這個飛行航線,只用將dp[x]=dp[y]就行了~
#include
#include
#include
#include
#include
#include
using
namespace
std;
#define ll long long
#define mem(a,b) memset(a,b,sizeof(a))
const
int maxn = 1e5+10;
double dp[maxn];
int vis[maxn];
vector
v[maxn];
int main()
for(int i=0;i<=n;i++) v[i].clear();
for(int i=0;iint x,y;
scanf("%d %d",&x,&y);
v[y].push_back(x);
}for(int j=0;j//因為可能直接跳到n點的
dp[v[n][j]]=dp[n];
vis[v[n][j]]=1;
}for(int i=n-1;i>=0;i--)
vis[i]=1;
}printf("%.4f\n",dp[0]);
}return
0;}
codeforces 867d
這個期望dp還是沒有想明白……
概率期望dp入門題 遊戲
題目 alice 和 bob 兩個人正在玩乙個遊戲,遊戲有很多種任務,難度為 p 的任務 p是正整數 有 1 2 p 的概率完成並得到 2 p 1 分,如果完成不了,得 0 分。一開始每人都是 0 分,從 alice 開始輪流做任務,她可以選擇任意乙個任務來做 而 bob 只會做難度為 1 的任務。...
期望及期望dp
簡單說就是概率 概率的價值 osu x 1 3 x3 3x2 3x 1 可以看出每多出乙個1,答案就會增加3x2 3x 1 於是可以維護x和x2的期望 x1 i x1 i 1 1 p i x2 i x2 i 1 2 x1 i 1 1 p i ans i ans i 1 3 x2 i 1 3 x1 i...
Poj 2096 dp求期望 入門
dp求期望的題。題意 乙個軟體有s個子系統,會產生n種bug。某人一天發現乙個bug,這個bug屬於某種bug,發生在某個子系統中。求找到所有的n種bug,且每個子系統都找到bug,這樣所要的天數的期望。需要注意的是 bug的數量是無窮大的,所以發現乙個bug,出現在某個子系統的概率是1 s,屬於某...