poj #2096:Collecting Bugs

来源:互联网 发布:电脑照片后期制作软件 编辑:程序博客网 时间:2024/05/16 15:03

题目描述: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 1002double 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;} 


0 0