题意:一个人被困在一个城堡里,面前有n条路,他自己有m百万元,选择每一条路都有p概率通过,q概率遇到士兵,1-p-q概率道路不通;遇到士兵的话需要上交1百万,如果不够钱,则被杀死,问的是最优情况下多少概率可以成功逃脱

思路是首先处理一下数据,想要最优肯定是在不被杀死的情况下越早走出越好,那就要求尽量不要碰到士兵,所以应该先对数据按照p/q排序一下,这样可以保证不死的概率最大,然后通过概率dp的方程即可得解

dp[i][j]代表第i条路还有j百万的情况

第i条路逃脱的情况是dp[i][j]*pi,第i条路碰到士兵并且不被杀死的情况可以推导出dp[i+1][j-1]的情况qi*dp[i][j],第i条路不通折返的情况是dp[i][j]*(1-pi-qi)

注意:因为概率是每次+=,所以要记得将dp数组清零
————————————————
版权声明:本文为CSDN博主「WShuo97」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/kuhuaishuxia/article/details/52042586

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=+;
struct node
{
double p,q;
}a[maxn];
double dp[maxn][maxn];
bool cmp(node x,node y)
{
return x.p*y.q>x.q*y.p;
}
int main()
{
int t;
scanf("%d",&t);
for(int T=; T<=t; T++){
int n,m;
scanf("%d%d",&n,&m);
for(int i=; i<=n; i++){
scanf("%lf%lf",&a[i].p,&a[i].q);
}
sort(a+,a++n,cmp);
memset(dp,,sizeof(dp));
dp[][m]=1.0;
double ans=;
for(int i=;i<=n;i++)
for(int j=m;j>=;j--){
dp[i+][j-]+=a[i].q*dp[i][j];
dp[i+][j]+=dp[i][j]*(-a[i].p-a[i].q);
ans+=dp[i][j]*a[i].p;
}
printf("Case %d: %.5lf\n",T,ans);
}
return ;
}

最新文章

  1. jsonp 演示实例 —— 基于node
  2. 各大搜索引擎智能提示API(JSONP跨域实现自动补全搜索建议)
  3. UML精粹2 - 开发过程
  4. Apache Spark的部署环境的小记
  5. Fedora 17下安装Oracle 10g详细图文教程
  6. 修复直接删除linux系统后grub丢失错误
  7. ubuntu下virtualbox使用u盘
  8. HUNNU11351:Pythagoras&#39;s Revenge
  9. 动态引入javascript
  10. 洛谷P3469[POI2008]BLO-Blockade
  11. CommonsChunkPlugin
  12. Python量化分析,计算KDJ
  13. dos命令大全 黑客必知的DOS命令集合
  14. webpack使用六
  15. ubuntu-docker入门到放弃(一)docker的安装
  16. information_schema系列十一
  17. [转载]CentOS6&amp;nbsp;快速搭建轻量级远程桌面&amp;nbsp;Xfce&amp;nb
  18. Available Date 相关
  19. 近中期3D编程研究目标
  20. Mongodb 常用命令2

热门文章

  1. Quick Sort(快速排序)
  2. pytest之assert断言
  3. 数据预处理 | 使用 OneHotEncoder 及 get_dummuies 将分类型数据转变成哑变量矩阵
  4. 剖析Javascript中forEach()底层原理,如何重写forEach()
  5. 在用vue-cli4创建的vue2.x项目中通过vue-fontawesome使用fontawesome5
  6. centos6.8安装教程
  7. [Codechef CHSTR] Chef and String - 后缀数组
  8. k线生成模块
  9. python3练习100题——009
  10. 初探selenium3原理