poj2096 Collecting Bugs(概率dp)
来源:互联网 发布:html5引导页源码 编辑:程序博客网 时间:2024/05/22 08:05
关键词:期望dp——剩余状态
题意:每次在n个程序中的某一个中找出s种bug中的一种。程序和bug种类的选择都是随机的。求至少每个程序中都找到一个bug且s种bug都找到的期望步数。
状态设计:状态维是当前状态,状态含义是到达末尾状态还需要的期望步数
dp[i][j]:已在i个程序中找到共j种bug,此时到达结尾还需要的期望步数
dp[i][j]可以转移到dp[i][j],dp[i+1][j],dp[i][j+1],dp[i+1][j+1]。而求期望步数则反过来由后者的期望步数可得到前者的期望步数。
dp[i][j]=(i/n)(j/s)*dp[i][j]+(1-i/n)(j/s)dp[i+1][j]+(i/n)(1-j/s)dp[i][j+1]+(1-i/n)*(1-j/s)*dp[i+1][j+1]+1
整理后可以得到dp[i][j]的递推公式
初始条件:dp[n][s]=0
#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h>#include<set>#include<vector>#include<map>#define ll long longusing namespace std;const int maxn = 1000+10;int n,s;double dp[maxn][maxn];int main(){ while(scanf("%d%d",&n,&s)!=EOF){ 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; dp[i][j]=(double)((n-i)*j*dp[i+1][j]+(n-i)*(s-j)*dp[i+1][j+1]+i*(s-j)*dp[i][j+1]+n*s)/(double)(n*s-i*j); } } printf("%.4lf\n",dp[0][0]); }}
0 0
- poj2096 Collecting Bugs(概率dp)
- poj2096 Collecting Bugs(概率dp)
- POJ2096:Collecting Bugs(概率dp & 期望)
- POJ2096 Collecting Bugs (概率DP)
- POJ2096--Collecting Bugs--概率DP
- POJ2096-Collecting Bugs(概率DP)
- poj2096——Collecting Bugs(概率DP)
- POJ2096 Collecting Bugs 解题报告【概率DP】
- [POJ2096]Collecting Bugs(期望dp)
- 【poj2096】Collecting Bugs(期望dp)
- Collecting Bugs(poj2096)
- poj2096--Collecting Bugs(概率dp第二弹,求期望)
- poj2096[Collecting Bugs] 又懂了一点期望概率DP
- 【poj2096】Collecting Bugs 期望dp
- [poj2096][动态规划DP]Collecting Bugs
- poj 2096 Collecting Bugs (概率dp)
- POJ 2096 Collecting Bugs(概率DP)
- POJ 2096 Collecting Bugs(概率dp)
- 第十二周 程序填空
- struts2+jsp+jquery+Jcrop实现图片裁剪并上传
- 图像处理和图像识别中常用的OpenCV函数 (转)
- C++运算符重载(11) - 重载<<和>>操作符
- Unity中的Lerp函数
- poj2096 Collecting Bugs(概率dp)
- gridview与adapter使用实例
- 一篇写得很不错的socket文章,通俗易懂
- python_学习笔记_基础练习_2
- 【Fragment精深系列7】Fragment切换优化
- bat 切换我的IP
- 完整java开发中JDBC连接数据库代码和步骤
- 在android里做一个竖着的seekbar
- Android之sqlite操作