HDU
来源:互联网 发布:淘宝女装拍照技巧 编辑:程序博客网 时间:2024/06/07 01:57
题意:Roy想要抢劫银行,每家银行多有一定的金额和被抓到的概率,知道Roy被抓的最大概率P,求Roy在被抓的情况下,抢劫最多。
思路:由于概率不是整数,所以不能以概率为背包容量,我们以金额为背包容量,dp[i]意义为当抢劫金额为i是被抓概率最小(我们将概率p转换为1-p,求其最大);
#include<iostream>#include<algorithm>#include<string>#include<cstring>#include<map>#include<queue>#include<cmath>#include<stack>#include<vector>#include<cstdio>#define MAXN 33000#define INF 0x3f3f3f3f#define lmid l,m,rt<<1#define rmid m+1,r,rt<<1|1#define ls rt<<1#define rs rt<<1|1#define Mod 1000000007#define i64 __int64using namespace std;int x[105];double num[105];double dp[10005];int main(){ int t; scanf("%d",&t); while(t--) { memset(dp,0,sizeof(dp)); int n; double m; scanf("%lf%d",&m,&n); m=1.0-m; int sum=0; for(int i=1;i<=n;i++) { scanf("%d%lf",&x[i],&num[i]); sum+=x[i]; num[i]=1.0-num[i]; } dp[0]=1.0; for(int i=1;i<=n;i++) for(int j=sum;j>=x[i];j--) { dp[j]=max(dp[j],dp[j-x[i]]*num[i]); } int ans; for(int i=sum;i>=0;i--) { //cout<<dp[i]<<" "<<i<<endl; if(dp[i]-m>=1e-8) { ans=i; break; } } cout<<ans<<endl; } return 0;}
阅读全文
0 0
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- hdu
- hdu
- HDU
- 128. Longest Consecutive Sequence
- 常用的linux命令
- ubuntu VMware
- LigerUI
- POJ2251 Dungeon Master
- HDU
- JVM 监控 jmxtrans 和 jmxtrans-agent
- linux ubuntu mount success
- Hibernate(十一)Criteria查询
- Android查看手机内部储存目录及数据库文件
- ubuntu配置Android指南
- sh和source的区别
- 【Python】用pip安装python库下载超时的解决办法
- 快速排序