Collecting Bugs
POJ - 2096
大意:
给你i个程序 j个bug 每天在一个程序中发现一种bug的概率相等 问最少多少天 所有的程序都发现bug且发现所有bug
f[i][j] 表示已经发现了i个程序有bug j种bug已被发现
那么
有 (n - i) / (n) * (s - j) / (s) 的概率在新程序中发现新bug
有 (n - i) / (n) * (j) / (s) 的概率在新程序中发现旧bug
有 (i) / (n) * (s - j) / (s) 的概率在旧程序中发现新bug
有 (i) / (n) * (j) / (s) 的概率在旧程序中发现旧bug
初始化f[n][s] = 0
直接转移
Select Code
#include <cstdio>
#include <iostream>
using namespace std;
int n, s;
double f[1005][1005];
int main()
{
cin >> n >> s;
f[n][s] = 0;
for(int i = n; i >= 0; --i)
for(int j = s; j >= 0; --j)
if(i != n || j != s)
f[i][j] = 1.0 * ((n - i) * (s - j) * f[i + 1][j + 1] + (n - i) * j * f[i + 1][j] + i * (s - j) * f[i][j + 1] + n * s) / (n * s - i * j );
printf( "%.4f\n", f[0][0] );
return 0;
}