日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LOOPS HDU - 3853 (概率dp):(希望通过该文章梳理自己的式子推导)

發布時間:2025/5/22 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LOOPS HDU - 3853 (概率dp):(希望通过该文章梳理自己的式子推导) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題意:就是讓你從(1,1)走到(r, c)而且每走一格要花2的能量,有三種走法:1,停住。2,向下走一格。3,向右走一格。問在一個網格中所花的期望值。

?

首先:先把推導動態規劃的基本步驟給出來。

·  1.設變量:(注意:設置變量時,要能夠使整個求解過程可以分為多個階段。)

   2.分析階段決策,并寫出決策函數。(也就是能體現前階段決策后階段關系的函數)

   3.寫出指標函數。(也是就是我們得出解的函數。)

?

先第一步:設置變量,我們分析這個題的是從(1,1)到(r, c)那么什么能體現“階段”這個詞的東西呢?

     十分明顯,那就是步數(把停下也看做一步)啊;那么來具體分析一下。假設:我們走到(x,y)那么他的上一階段是不是有三種可能,那么這三種上一階,是不是由上上一階的決策所決定的。是不是這樣就把分層分階段給劃出來了。那么我們就設dp[i][j]? 表示走到(x,y)時的期望值,最重要的是i,j的意義。

?

然后第二步:(分析決策函數)

設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](我只是想更好的讓大家理解這個決策)。好了,這個決策函數就寫好了

最后第三步:(分析指標函數)

設Vk為指標函數。當然,一般有最值等等類型。我還是回到原題。假設走到(x, y)那么這前部的期望值是由決策函數來決策的。

回到決策函數: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)

好了,其實指標函數就是動態規劃方程式了, 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):(希望通过该文章梳理自己的式子推导)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。