• POJ P2096 Collecting Bugs


    思路


    分类讨论,不妨先设$DP[i][j]$表示已经发现$i$种子系统中有$n$种$bug$无非只有四种情况

    • 发现的$bug$在旧的系统旧的分类,概率$p1$是$(i/s)*(j/n)$.
    • 发现的$bug$在旧的系统新的分类,概率$p2$是$(i/s)*((n-j)/n)$
    • 发现的$bug$在新的系统旧的分类,概率$p3$是$((s-i)/s)*(j/n)$
    • 发现的$bug$在新的系统新的分类,概率$p4$是$((s-i)/s)*((n-j)/n)$
    • 那么我们很自然的就得到了下面的转移方程

    $$dp[i][j] = p1*dp[i][j]+p2*dp[i][j+1]+p3*dp[i+1][j]+p4*dp[i+1][j+1]$$

    代码

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    
    const int maxn = 1010;
    
    using namespace std;
    
    int n, s;
    double dp[maxn][maxn], p1, p2, p3, p4;
    
    int main() {
    	while (scanf("%d%d", &n, &s) == 2) {
    		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;
    				p1=1.0*i/n*j/s;
    				p2=1.0*(n-i)/n*j/s;
    				p3=1.0*i/n*(s-j)/s;
    				p4=1.0*(n-i)/n*(s-j)/s;
    				dp[i][j]=(p2*dp[i+1][j]+p3*dp[i][j+1]+p4*dp[i+1][j+1]+1.0)/(1.0-p1);
    			}
    		}
    		printf("%.4f
    ",dp[0][0]);
    	}
    }
    

      

      

  • 相关阅读:
    2019春季第五周作业
    第四周作业
    第三周作业编程总结
    第四周编程总结
    第三周编程总结
    2019春第一周作业编程总结
    我人生中对我影响深刻的三个老师
    秋季学习总结
    自我介绍
    2019春第10周作业
  • 原文地址:https://www.cnblogs.com/bljfy/p/9332451.html
Copyright © 2020-2023  润新知