Collecint Bugs

Subject:
http://poj.org/problem?id=2096

A software has sss subsystems will producennn b u g bug b u g . Someone can find abug ina dayb u g , thisbug bugThe probability that b u g belongs to a subsystem is1 s \frac{1}{s}s1, Belonging to a certain type of bug bugThe probability of b u g is1 n \frac{1}{n}n1. Ask to discover nnn b u g bug b u g , andbugshave been found in every subsystemExpectation of b u g days.

Thinking:
dp [i] [j] dp[i][j]d p [ i ] [ j ] means thatiihas been foundi b u g bug b u g , and thesebugsb u g belongs tojjj个系统,达到目标状态的天数的期望。有
d p [ i ] [ j ] = 1 + i n ∗ j s d p [ i ] [ j ] + i n ∗ s − j s d p [ i ] [ j + 1 ] + n − i n ∗ j s d p [ i + 1 ] [ j ] + n − i n ∗ s − j s d p [ i + 1 ] [ j + 1 ] ( 1 − i ∗ j s ∗ n ) ∗ d p [ i ] [ j ] = 1 + i n ∗ s − j s d p [ i ] [ j + 1 ] + n − i n ∗ j s d p [ i + 1 ] [ j ] + n − i n ∗ s − j s d p [ i + 1 ] [ j + 1 ] \begin{aligned} dp[i][j]&=1+\frac{i}{n}*\frac{j}{s}dp[i][j]+\frac{i}{n}*\frac{s-j}{s}dp[i][j+1]\\ &+\frac{n-i}{n}*\frac{j}{s}dp[i+1][j]+\frac{n-i}{n}*\frac{s-j}{s}dp[i+1][j+1]\\ (1-\frac{i*j}{s*n})*dp[i][j]&=1+\frac{i}{n}*\frac{s-j}{s}dp[i][j+1]+\frac{n-i}{n}*\frac{j}{s}dp[i+1][j]\\ &+\frac{n-i}{n}*\frac{s-j}{s}dp[i+1][j+1]\\ \end{aligned} dp[i][j](1snij)dp[i][j]=1+nisjdp[i][j]+nissjdp[i][j+1]+nnisjdp[i+1][j]+nnissjdp[i+1][j+1]=1+nissjdp[i][j+1]+nnisjdp[i+1][j]+nnissjdp[i+1][j+1]
d p [ n ] [ s ] = 0 dp[n][s]=0 dp[n][s]=0

#include"cstdlib"
#include"cstdio"
#include"cstring"
#include"cmath"
#include"queue"
#include"algorithm"
#include"iostream"
#define eps 1e-5
using namespace std;
double dp[1020][1020];
int main()
{
    
    
    int n,s;
    while(cin>>n>>s)
    {
    
    
        memset(dp,0,sizeof(dp));
        for(int i=n; i>=0; i--)
        {
    
    
            for(int j=s; j>=0; j--)
            {
    
    
                if(i==n&&j==s) continue;
                double tep=1.0;
                if(i<n) tep+=(n*1.0-i)*j/(n*s)*dp[i+1][j];
                if(j<s) tep+=(s*1.0-j)*i/(n*s)*dp[i][j+1];
                if(i<n&&j<s) tep+=(n*1.0-i)*(s*1.0-j)/(n*s)*dp[i+1][j+1];
                dp[i][j]=tep/(1-(i*j*1.0)/(s*n));
            }
        }
        printf("%.4f\n",dp[0][0]);
    }
    return 0;
}

Guess you like

Origin blog.csdn.net/qq_43520313/article/details/108577844