hdu(2955)——Robberies
2015-09-20 23:00
211 查看
题意:
现在一个人想去抢劫银行,如果他被抓的概率低于P的话,那么他就是安全的。
然后给出N,代表他想抢劫的银行的个数,然后N行,有Mj,Pj,代表的是银行有Mj这么多钱,然后被抓的概率是Pj。
然后问你当被抓的概率低于P的时候,叫你输出他能够抢到的最多的钱。
思路:
感觉和I need an offer 这道题相似。
定义状态dp[i]为当得到的钱为i时,没被抓的概率为dp[i]。如果我们定义为被抓的概率的话,那么一开始全都初始化为0了,所以这样是不对的,因为无法在后面继续推过去。
然后就和前面那题类似了,dp[v]=max(dp[v],dp[v-m[i]]*p[i]);
最后当dp[v]-P>=eps时,然后就一直更新能够获取的钱的最大值。
现在一个人想去抢劫银行,如果他被抓的概率低于P的话,那么他就是安全的。
然后给出N,代表他想抢劫的银行的个数,然后N行,有Mj,Pj,代表的是银行有Mj这么多钱,然后被抓的概率是Pj。
然后问你当被抓的概率低于P的时候,叫你输出他能够抢到的最多的钱。
思路:
感觉和I need an offer 这道题相似。
定义状态dp[i]为当得到的钱为i时,没被抓的概率为dp[i]。如果我们定义为被抓的概率的话,那么一开始全都初始化为0了,所以这样是不对的,因为无法在后面继续推过去。
然后就和前面那题类似了,dp[v]=max(dp[v],dp[v-m[i]]*p[i]);
最后当dp[v]-P>=eps时,然后就一直更新能够获取的钱的最大值。
#include<stdio.h> #include<string.h> #include<math.h> #include<iostream> #include<algorithm> using namespace std; #define eps 1e-8 #define maxn 10010 int m[111]; double dp[maxn],p[111]; int main(){ int T,n; while(~scanf("%d",&T)){ while(T--){ double P; memset(dp,0,sizeof(dp)); memset(p,0,sizeof(p)); memset(m,0,sizeof(m)); scanf("%lf%d",&P,&n); P=1.0-P; int sum=0; for(int i=1;i<=n;i++) scanf("%d%lf",&m[i],&p[i]),sum+=m[i],p[i]=1.0-p[i]; dp[0]=1.0; for(int i=1;i<=n;i++){ for(int v=sum;v>=0;v--){ if(v>=m[i]) dp[v]=max(dp[v],dp[v-m[i]]*p[i]); } } int ans=0; for(int v=sum;v>=0;v--){ //printf("%.2lf ",dp[v]); if(dp[v]-P>=eps){ ans=v; break; } } printf("%d\n",ans); } } } /* */
相关文章推荐
- html5 API
- ios学习笔记——UIScrollView
- 大道至简第一章读后感
- 面试准备之JavaScript
- 今天是今年的第几天
- 信息安全系统设计基础第一周学习总结
- Android UI界面shape的用法
- Android Animation的一些简单用法
- getParameter和getAttribute的区别和各自的使用范围。
- LeetCode Container With Most Water
- iOS: sqlite数据库的基本操作
- 例——实例方法能够被覆盖
- linux挂载根文件系统过程
- 2、分支结构程序体验-项目3(发工资)
- JAVA 简易计算器
- VB6基本数据库应用(九):【增补篇】不同的引擎的语法差异
- hdu 2256 Problem of Precision 矩阵快速幂
- 里氏替换原则
- CSS扩展技术less
- 抛弃win