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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

POJ-1322 Chocolate 动态规划

發(fā)布時(shí)間:2025/4/14 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POJ-1322 Chocolate 动态规划 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這題當(dāng)M=N=0的時(shí)候要輸出1.000? 剛寫(xiě)的時(shí)候默認(rèn)從第二次開(kāi)始取了.

詳見(jiàn)代碼:

#include <cstdlib> #include <cstring> #include <cstdio> #include <algorithm> #include <iostream> using namespace std;/* 題意:從一個(gè)擁有無(wú)限多的盒子中拿出不同顏色的糖果,拿出任何一種顏色的概率都是1/C每次拿出來(lái)的糖果都放在桌子上,如果有相同顏色的糖果,就把這兩顆糖果吃掉.問(wèn)拿了N次后,桌子上面剩余的糖果數(shù)量為M的概率是多大 解法:設(shè)狀態(tài)dp[i][j]為選i次后剩余j顆糖果的概率為多大,省略了一維糖果的顏色數(shù),因此每次需要重新計(jì)算這個(gè)dp值,有如下dp方程:dp[i][j] = dp[i-1][j-1] * (C-j+1)/C + dp[i-1][j+1] * (j+1)/C含義就是從上一次后拿到了一顆不同顏色的糖果,桌子上增加了一顆糖果而來(lái)或者是拿到了一顆相同顏色的糖果,桌子上減少了一顆糖果而來(lái) 通過(guò)牛人的測(cè)試,當(dāng)N大于1000的時(shí)候,為偶數(shù)就當(dāng)做1000處理,為奇數(shù)的時(shí)候就當(dāng)做1001處理,因?yàn)镹很大之后,僅僅靠小數(shù)點(diǎn)的后三位已經(jīng)反映不去其差別 */int C, M, N; double dp[2][1005][105]; void DP() {memset(dp, 0, sizeof (dp)); dp[1][1][1] = 1.0; // 摸一次一定會(huì)得到一個(gè)顏色的糖果for (int i = 2; i <= N; ++i) {int x = i & 1;for (int j = 0; j <= C; ++j) {if (j - 1 >= 0)dp[x][i][j] += dp[!x][i-1][j-1]*(C-j+1)/C;if (j + 1 <= C)dp[x][i][j] += dp[!x][i-1][j+1]*(j+1)/C;}} } int main() {while (scanf("%d", &C), C) {scanf("%d %d", &N, &M); if (N == 0 && M == 0) { printf("%.3lf\n", 1.);continue;}if ((N&1)^(M&1) || M > C || M > N) {printf("%.3lf\n", 0.);continue;}if (N > 1000) {N = N & 1 ? 1001 : 1000;}DP();printf("%.3lf\n", dp[N&1][N][M]);}return 0; }

?

轉(zhuǎn)載于:https://www.cnblogs.com/Lyush/archive/2013/01/11/2857203.html

總結(jié)

以上是生活随笔為你收集整理的POJ-1322 Chocolate 动态规划的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。