日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

POJ-1322 Chocolate 动态规划

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

這題當M=N=0的時候要輸出1.000? 剛寫的時候默認從第二次開始取了.

詳見代碼:

#include <cstdlib> #include <cstring> #include <cstdio> #include <algorithm> #include <iostream> using namespace std;/* 題意:從一個擁有無限多的盒子中拿出不同顏色的糖果,拿出任何一種顏色的概率都是1/C每次拿出來的糖果都放在桌子上,如果有相同顏色的糖果,就把這兩顆糖果吃掉.問拿了N次后,桌子上面剩余的糖果數(shù)量為M的概率是多大 解法:設(shè)狀態(tài)dp[i][j]為選i次后剩余j顆糖果的概率為多大,省略了一維糖果的顏色數(shù),因此每次需要重新計算這個dp值,有如下dp方程:dp[i][j] = dp[i-1][j-1] * (C-j+1)/C + dp[i-1][j+1] * (j+1)/C含義就是從上一次后拿到了一顆不同顏色的糖果,桌子上增加了一顆糖果而來或者是拿到了一顆相同顏色的糖果,桌子上減少了一顆糖果而來 通過牛人的測試,當N大于1000的時候,為偶數(shù)就當做1000處理,為奇數(shù)的時候就當做1001處理,因為N很大之后,僅僅靠小數(shù)點的后三位已經(jīng)反映不去其差別 */int C, M, N; double dp[2][1005][105]; void DP() {memset(dp, 0, sizeof (dp)); dp[1][1][1] = 1.0; // 摸一次一定會得到一個顏色的糖果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 动态规划的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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