poj 2096 Collecting Bugs 期望dp

来源:互联网 发布:aes256算法 java实现 编辑:程序博客网 时间:2024/05/21 08:59

其实这个已经看不到dp的思想了感觉,没有重复子问题,只是一个递推。

关键在于对期望的了解

dp[i][j]表示找到i个bug,j个系统里面找到bug,离目标的距离的期望。

然后dp[i][j]可以产生dp[i+1][j] dp[i][j+1] dp[i+1][j+1]dp[i][j]这四个状态

                   概率分别为(n-i)\n*(j)\s等等

然后列出一个等式,就可以得到dp[i][j]的递推式。dp[n][s]为0,dp[0][0]为所求

 

但是现在我还对一个东西部是很明白,为什么dp[i][j]能产生后面几种状态就能画上=号?

 

 

下面是代码

#include
#include
#include
using namespace std;
const int maxn=1011;
double dp[maxn][maxn];
int main()
{
    doublen,s;
    scanf("%lf%lf",&n,&s);
    for(inti=n;i>=0;i--)
    for(intj=s;j>=0;j--)
   if(i!=n||j!=s)
    {
       dp[i][j]+=dp[i+1][j]*(n-i)*(j)/(n*s);
       dp[i][j]+=dp[i][j+1]*(i)*(s-j)/(n*s);
       dp[i][j]+=dp[i+1][j+1]*(n-i)*(s-j)/(n*s);
       dp[i][j]++;
       dp[i][j]/=(1.0-i*j/n/s);
    }
   printf("%.4f\n",dp[0][0]);
    return0;
}

原创粉丝点击