zoukankan      html  css  js  c++  java
  • poj 2096Collecting Bugs

    题目链接

    poj 2096Collecting Bugs

    题解

    dp[i][j]表示已经找到i种bug,并存在于j个子系统中,要达到目标状态的天数的期望。
    显然,dp[n][s]=0,因为已经达到目标了。而dp[0][0]就是我们要求的答案。
    dp[i][j]状态可以转化成以下四种:
    dp[i][j] 发现一个bug属于已经找到的i种bug和j个子系统中-->p1 = ij / (ns)
    dp[i+1][j] 发现一个bug属于新的一种bug,但属于已经找到的j种子系统-->p2 = (n-i)j / (ns)
    dp[i][j+1] 发现一个bug属于已经找到的i种bug,但属于新的子系统-->p3 = i(s-j) / (ns)
    dp[i+1][j+1]发现一个bug属于新的一种bug和新的一个子系统-->p4 = (n-i)(s-j) / (ns)
    dp[i][j] = (sum 由XX转移来的期望)
    发现dp[i][j]不能用dp[i][j] 更新,移项有去除dp[i][j]列转移方程

    代码

    #include<cstdio>
    #include<algorithm> 
    inline int read() { 
    	int x = 0; 
    	char c = getchar(); 
    	while(c < '0' || c > '9')c = getchar(); 
    	while(c <= '9' && c >= '0')x = x * 10 + c - '0',c = getchar(); 
    	return x; 
    } 
    const int maxn = 1007; 
    int n,s;  
    double dp[maxn][maxn]; 
    int main() { 
    	n = read();s = read(); 	
    	for(int i = n;i >= 0;-- i) {
    		for(int j = s;j >= 0;-- j) {
    	 		if(i == n && s == j) continue; 
    			double p1 = 1.0 * i * j / (1.0 * n * s); 
    			double p2 = 1.0 * (n - i) * j / (1.0 * n * s); 
    			double p3 = 1.0 * i * (s - j) / (1.0 * n * s); 
    			double p4 = 1.0 * (n - i) * (s - j) / (1.0 * n * s); 
    			dp[i][j] = double (dp[i + 1][j] * p2 + dp[i][j + 1] * p3 + dp[i + 1][j + 1] * p4 + 1) / (1 - p1); 
    		}
    	}	
    	printf("%.4lf
    ",dp[0][0]); 
    	return 0; 
    } 
    
    
  • 相关阅读:
    JAVA设计模式之单例模式
    JAVA设计模式之单例模式
    数据库连接池
    数据库连接池
    DbUtils操作数据库
    DbUtils操作数据库
    Hadoop 问题之 Linux服务器jps报process information unavailable
    echarts ——纵坐标赋值
    echarts ——div没有设置样式图表就展示不出来!
    Elasticsearch+spring boot(一)
  • 原文地址:https://www.cnblogs.com/sssy/p/9178857.html
Copyright © 2011-2022 走看看