poj 2096概率dp

来源:互联网 发布:linux qt4.8.0下载 编辑:程序博客网 时间:2024/06/06 01:41

题意如下:
有一个软件,由s个子系统构成,它会产生n种类型bug,一个人每天发现一个bug,该bug会属于s个子系统,n种bug。问发现所有s个子系统和n种bug的期望天数。
简单概率dp。
我们设f[i][j]为发现i个子系统bug和n种bug还要的期望天数。
显然f【n】【s】为0 。
对于转移方程来说我们会有四种情况,1发现一个属于新的子系统和新类型的bug,2发现一个新子系统bug但不属于新类型,3发现一个新类型但不属于新子系统,4发现已经找到过的旧类型旧子系统bug。
所以ac代码如下:

#include <cstdio>#include <cstring>#include <algorithm>#define N 1005using namespace std;int n,s;double f[N][N];int main(){    scanf("%d%d",&n,&s);    for(int i=n;i>=0;--i)    for(int j=s;j>=0;--j){        if(i==n&&j==s)continue;        double p1,p2,p3,p4;        p1=1.0*(n-i)*(s-j);        p2=1.0*(n-i)*j;        p3=1.0*i*(s-j);        p4=1.0*(n*s-i*j);        f[i][j]=(p1*f[i+1][j+1]+p2*f[i+1][j]+p3*f[i][j+1]+1.0*n*s)/p4;    }    printf("%0.4lf\n",f[0][0]);    return 0;}
原创粉丝点击