zoukankan      html  css  js  c++  java
  • 【期望DP】[poj2096]Collecting Bugs

    偷一波翻译:

    工程师可以花费一天去找出一个漏洞——这个漏洞可以是以前出现过的种类,也可能是未曾出现过的种类,同时,这个漏洞出现在每个系统的概率相同。要求得出找到n种漏洞,并且在每个系统中均发现漏洞的期望天数。

    Translated By 大米饼

     

    求期望天数...那就推式子吧:dp[i][j]表示已经找出了i个漏洞,已经出现在了j个系统中的期望天数


    $$dp[i][j]=(dp[i][j]+1)*frac{i*j}{s*n}+(dp[i][j+1]+1)*frac{i*(s-j)}{n*s}+(dp[i+1][j]+1)*frac{(n-i)*s}{n*s}+(dp[i+1][j+1]+1)*frac{(n-i)*(s-j)}{n*s}$$

    应该都能看得懂我写了什么东西吧...

    然后等式左右都出现了f[i][j],那就没法转移了吗?

    移项就好了qaq

    然后显然要逆推初始化dp[n][s]=0,最终结果在dp[0][0]上面

     1 #include<iostream>
     2 #include<cstdio>
     3 #define writeln(x)  write(x),puts("")
     4 #define writep(x)   write(x),putchar(' ')
     5 using namespace std;
     6 inline int read(){
     7     int ans=0,f=1;char chr=getchar();
     8     while(!isdigit(chr)){if(chr=='-') f=-1;chr=getchar();}
     9     while(isdigit(chr)){ans=(ans<<3)+(ans<<1)+chr-48;chr=getchar();}
    10     return ans*f;
    11 }void write(int x){
    12     if(x<0) putchar('-'),x=-x;
    13     if(x>9) write(x/10);
    14     putchar(x%10+'0');
    15 }const int M = 1005;
    16 double dp[M][M];
    17 int n,s;
    18 int main(){
    19     while(~scanf("%d%d",&n,&s)){
    20         dp[n][s]=0;
    21         for(int i=n;i>=0;i--)
    22             for(int j=s;j>=0;j--){
    23                 if(i==n&&j==s) continue;
    24                 dp[i][j]=dp[i+1][j]*(n-i)*j+dp[i][j+1]*i*(s-j)+dp[i+1][j+1]*(n-i)*(s-j)+n*s;
    25                 dp[i][j]/=1.0*(n*s-i*j);
    26             }
    27         printf("%.4lf
    ",dp[0][0]);
    28     }
    29     return 0;
    30 }

     

     

  • 相关阅读:
    虚拟主机wordpress文件上传大小限制更改
    wordpress网站迁移
    JavaScript算法相关
    文章阅读(三)
    文章阅读(二)
    Image():强制让图片缓存起来
    JavaScript运算符与类型
    JavaScript权威指南--多媒体和图形编程
    JavaScript权威指南--脚本化HTTP
    JavaScript权威指南--事件处理
  • 原文地址:https://www.cnblogs.com/zhenglw/p/11282254.html
Copyright © 2011-2022 走看看