poj #2096:Collecting Bugs

題目描述:http://poj.org/problem?id=2096

概率dp簡單題,題目分析參考了這篇:http://www.cnblogs.com/kuangbin/archive/2012/10/02/2710621.html

注意:dp[i][j]表示已經找到i種bug,且屬於j個子程序,還需要的天數的數學期望。

由分析可知:dp[i][j] = (i/n)(j/s)(dp[i][j]+1) + (i/n)((s-j)/s)(dp[i][j+1]+1) + ((n-i)/n)(j/s)(dp[i+1][j]+1) + ((n-i)/n)((s-j)/s)(dp[i+1][j+1]+1)

化簡可得:dp[i][j] = (i*(s-j)*dp[i][j+1] + (n-i)*j*dp[i+1][j] + (n-i)*(s-j)*dp[i+1][j+1] + n*s)/(n*s - i*j)。

另外,搞不明白poj上用GCC提交時得改成%.4f而不能用lf

#include <stdio.h>
#define MAX_N 1002

double dp[MAX_N][MAX_N];

int main(){
	int n, s, i, j;
	
	while(scanf("%d%d", &n, &s) != EOF){
		dp[n][s] = 0;
		
		for(i = n; i >= 0; i--){
			for(j = s; j >= 0; j--){
				if(i == n && j == s){
					continue;
				}
				dp[i][j] = (i*(s-j)*dp[i][j+1] + (n-i)*j*dp[i+1][j] + (n-i)*(s-j)*dp[i+1][j+1] + n*s) \
							/(n*s - i*j);
			}
		}
		printf("%.4f\n", dp[0][0]);
	}
	
	return 0;
} 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章