程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> POJ 2096 Collecting Bugs 概率dp(水

POJ 2096 Collecting Bugs 概率dp(水

編輯:C++入門知識

POJ 2096 Collecting Bugs 概率dp(水


題目鏈接:點擊打開鏈接

題意:

點擊打開鏈接

對於這裡的dp做法是:

寫一個狀態x,然後把從x轉移出去的方程寫出來,即 x = y1+y2+···

其中所有的yi都是已知的。

這樣我們就會得到一個方程是從未知到已知。

但是dp是由已知到未知。所以我們再呵呵回來。。



#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
const int N = 1005;
double dp[N][N]; //dp[i][j] 表示已經找到了i個系統, j個bug 的天數
int n, s;
double solve(){
	dp[n][s] = 0.0;
	for(int i = n; i >= 0; i--) {
		for(int j = s; j >= 0; j--)
		{
			if(i == n && j == s)continue;
			dp[i][j] = (n-i)*(s-j)*dp[i+1][j+1] + i*(s-j)*dp[i][j+1] + (n-i)*j*dp[i+1][j] + n*s;
			dp[i][j] /= n*s - i*j;
		}
	}
	return dp[0][0];
}
int main() {
    while(cin>>n>>s)
    	printf("%.4f\n", solve());
    return 0;
}


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved