CF 148D Bag of mice 概率DP
2015-08-04 14:01
302 查看
刚开始总感觉dp用一维就可以了,dp[i]表示第i局公主获胜的概率,然后卡在了逃出的是白鼠黑鼠的判断上,两种状态需要分开讨论,但是在概率上又会同时对后续结果有影响,与此同时 这两种情况又是不共存的,所以考虑二维数组,如果i表示第几局的话,dp[i][j]中j打死我也想不到有价值的表示意义。所以我肯定刚开始的思路都是错误的。。。
换思路,=.= 想不通, 好吧看题解。。。。。。。。。。。。。-.-|| 我偏了 。 很偏的那种。。。
下面介绍前辈的做法:dp[i][j]表示白鼠黑鼠数量分别为i,j 时公主获胜的概率,状态转换呼之欲出。。。=.=
换思路,=.= 想不通, 好吧看题解。。。。。。。。。。。。。-.-|| 我偏了 。 很偏的那种。。。
下面介绍前辈的做法:dp[i][j]表示白鼠黑鼠数量分别为i,j 时公主获胜的概率,状态转换呼之欲出。。。=.=
#include <iostream> #include<cstdio> #include<cstring> using namespace std; double dp[1002][1002]; int main() { int a,b; while(scanf("%d%d",&a,&b)!=EOF){ int i,j; memset(dp,0,sizeof(dp)); for(i=1;i<=a;i++) dp[i][0]=1; for(i=1;i<=a;i++) for(j=1;j<=b;j++){ dp[i][j]+=(double)i/(i+j); if(j>=3) dp[i][j]+=((double)j/(i+j))*((double)(j-1)/(i+j-1))*((double)(j-2)/(i+j-2))*dp[i][j-3]; if(j>=2) dp[i][j]+=((double)j/(i+j))*((double)(j-1)/(i+j-1))*((double)i/(i+j-2))*dp[i-1][j-2]; } printf("%.9lf\n",dp[a][b]); } return 0; }
相关文章推荐
- 【细说PHP学习】第九章 PHP中的数组与数据结构
- VS2010 fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 嵌入清单
- 最新版SDWebImage的使用
- grunt切换下载源
- Eclipse 开发WEB项目所遇问题 WebContent WebRoot
- 基于PCNTL的PHP并发编程
- APK动态加载框架(DL)解析
- LightOJ 1051 Good or Bad 解题报告
- 第一个简单的DEMO
- 浮动与负margin
- iOS7加载富文本(UILabel)
- 匈牙利命名法
- 我的项管之路
- Java学习(过滤器,监听器,拦截器)
- C# 使用ffmpeg.exe进行音频转换完整demo-asp.net转换代码
- 深度解读Adblock plus经历与底层算法实现
- iOS应用内付费(IAP)开发步骤
- spring+junit+eclemma完成单元测试
- Windows 内核(WRK)简介
- 安装Ubuntu14.04的时候给这个提示(为/检查磁盘时发现严重错误)