poj 2096概率dp

xiaoxiao2021-02-28  126

题意如下: 有一个软件,由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 1005 using 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; }
转载请注明原文地址: https://www.6miu.com/read-22711.html

最新回复(0)