LOOPS HDU - 3853 (概率dp):(希望通过该文章梳理自己的式子推导)
題意:就是讓你從(1,1)走到(r, c)而且每走一格要花2的能量,有三種走法:1,停住。2,向下走一格。3,向右走一格。問在一個網(wǎng)格中所花的期望值。
?
首先:先把推導動態(tài)規(guī)劃的基本步驟給出來。
· 1.設變量:(注意:設置變量時,要能夠使整個求解過程可以分為多個階段。)
2.分析階段決策,并寫出決策函數(shù)。(也就是能體現(xiàn)前階段決策后階段關系的函數(shù))
3.寫出指標函數(shù)。(也是就是我們得出解的函數(shù)。)
?
先第一步:設置變量,我們分析這個題的是從(1,1)到(r, c)那么什么能體現(xiàn)“階段”這個詞的東西呢?
十分明顯,那就是步數(shù)(把停下也看做一步)啊;那么來具體分析一下。假設:我們走到(x,y)那么他的上一階段是不是有三種可能,那么這三種上一階,是不是由上上一階的決策所決定的。是不是這樣就把分層分階段給劃出來了。那么我們就設dp[i][j]? 表示走到(x,y)時的期望值,最重要的是i,j的意義。
?
然后第二步:(分析決策函數(shù))
設Sk便是第k階段. 設決策為Pk
則S1={(1,1),(2,1),(1,2);則,那么Pk就在S1中決策,我們這道題的決策P1=P01+P02+P03?<=>dp[1][1]=dp[1][1]+dp[2][1]+dp[1][2](我只是想更好的讓大家理解這個決策)。好了,這個決策函數(shù)就寫好了
最后第三步:(分析指標函數(shù))
設Vk為指標函數(shù)。當然,一般有最值等等類型。我還是回到原題。假設走到(x, y)那么這前部的期望值是由決策函數(shù)來決策的。
回到?jīng)Q策函數(shù):Pk=P(k-1)1+P(k-1)2+P(k-1)3? (設h1,h2, h3分別是對應的概率) 那么Vk=(h1*P(k-1)1+h2*P(k-1)2+h3*P(k-1)3+2)
好了,其實指標函數(shù)就是動態(tài)規(guī)劃方程式了, dp[i][j]=(p[i][j][0]*dp[i][j]+p[i][j][1]*dp[i][j+1]+p[i][j][2]*dp[i+1][j]+2)? ===>
dp[i][j]=(p[i][j][1]*dp[i][j+1]+p[i][j][2]*dp[i+1][j]+2)/(1-p[i][j][0]);
ac代碼:
#include<cstring> #include<cstdio> #define maxn int(1e3+2)double dp[maxn][maxn], p[maxn][maxn][3];int main(){int r, c;while (scanf("%d%d", &r, &c) != EOF){for (int i = 1; i <= r;++i)for (int j = 1; j <= c;++j)for (int k = 0; k < 3; ++k)scanf("%lf", &p[i][j][k]);dp[r][c] = 0;for (int i = r; i>0; --i)for (int j = c; j > 0;--j)if (p[i][j][0] == 1||i==r&&j==c)continue;else {dp[i][j] = (p[i][j][1] * dp[i][j + 1] + p[i][j][2] * dp[i + 1][j] + 2) / (1 - p[i][j][0]);}printf("%.3lf\n", dp[1][1]);} }?
轉載于:https://www.cnblogs.com/ALINGMAOMAO/p/9719994.html
總結
以上是生活随笔為你收集整理的LOOPS HDU - 3853 (概率dp):(希望通过该文章梳理自己的式子推导)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信小程序实战篇-分类页面制作
- 下一篇: 海藻酸含量测定用的是什么显色剂?