hdu 2955 Robberies
来源:互联网 发布:万网域名备案注销 编辑:程序博客网 时间:2024/05/22 12:53
题意:Roy 要去抢银行,给你一个Roy 的被抓概率,再给出N个银行的钱和抓捕概率。求能抢的最大的钱数。
由概率的知识可知,要求被抓概率,需要先求反面,也就是逃脱的概率,只有逃脱的概率才能连乘。
构造dp[i]表示抢到i数量的钱最大的逃脱概率。
转移方程 dp[i]=max(dp[i],dp[i-cost[j]]*p[j]); cost[j]代表第j个银行的钱,p[j]代表第j个银行的逃跑概率(1-被抓概率).
dp[0]=1抢0个银行逃脱率100%
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;double dp[20000];double p[20000];int cost[1000];int main(){ int t,n; double f; int a; int sum; scanf("%d",&t); while(t--) { sum=0; scanf("%lf %d",&f,&a); f=1-f; memset(dp,0,sizeof(dp)); for(int i=1;i<=a;i++) { scanf("%d %lf",&cost[i],&p[i]); sum+=cost[i]; p[i]=1-p[i]; } dp[0]=1; for(int i=0;i<=a;i++) for(int j=sum;j>=cost[i];j--) { dp[j]=max(dp[j],dp[j-cost[i]]*p[i]); } // cout<<"sum="<<sum<<endl; for(int i=sum;i>=0;i--) { // printf("dp[%d]=%lf\n",i,dp[i]); if(dp[i]>=f) { printf("%d\n",i); break; } } } return 0;}
- hdu 2955 Robberies
- HDU 2955 - Robberies
- hdu 2955 Robberies DP
- Hdu 2955 - Robberies
- hdu 2955 Robberies
- hdu 2955 Robberies
- hdu 2955 Robberies
- hdu 2955 Robberies
- HDU 2955 Robberies
- hdu 2955 Robberies
- hdu 2955(Robberies)
- hdu 2955 Robberies
- HDU 2955 Robberies
- hdu 2955 Robberies
- hdu 2955 Robberies
- hdu-2955-Robberies
- hdu 2955 Robberies
- HDU:2955 Robberies
- HDU2800(找规律)
- hdu1789 Doing Homework again
- C++学习_特殊容器: bitset,stack,queue 和Priority Queues
- 密码发生器
- String、字符串缓冲区、基本数据类型包装类
- hdu 2955 Robberies
- java反射机制
- Linux 高可用性(HA)集群探讨
- Word2010中的格式标记
- java模式之门面模式
- 黑马程序员------交通灯管理系统
- 在项目前期需求分析阶段,需要编写的文档
- 使用ImageView 加上 Edittext做出自定义的输入框(EditText美化)
- Java 标识符