HDU2955 Robberies 01背包
来源:互联网 发布:淘宝申请退款后发货 编辑:程序博客网 时间:2024/05/18 01:20
题目大意:Roy要抢劫银行,每抢一个银行都有一定的被抓概率,现在给你一个安全概率,以及每个银行的库存现金和抢劫该银行被抓的概率,问你在安全概率的情况下Roy最多可以抢劫多少现金。
乍一看是背包问题,其实就是背包问题,只要稍微变形一下就行了,可以看出,本题中安全概率是背包的容量,每个银行的被抓概率是质量,但这样肯定是行不通的,因为我们要用dp[ i ]数组来纪录质量为i时的最大价值,那么质量显然要为整数才行,所以我们可以把问题反过来看,把每个银行的库存现金看做是质量,那么所有银行的库存现金总数就是背包的容量了,每个银行被抓的概率就可以看做是每件物品的价值了,这样问题便迎刃而解了。
状态转移方程:dp(i,sum)=max(dp(i-1,sum),dp(i-1,sum-w[ i ])*(1-p[ i ] ));
#include <cstdio>#include <cstring>#include <iostream>using namespace std;typedef struct node{ int m; double p;}Bag;Bag bag[110];double dp[11000];int main(){ int t,n,sum; int i,j; double pro; cin>>t; while(t--) { sum=0; scanf("%lf%d",&pro,&n); for(i=1;i<=n;i++) { scanf("%d%lf",&bag[i].m,&bag[i].p); sum+=bag[i].m; } memset(dp,0,sizeof(dp)); dp[0]=1; for(i=1;i<=n;i++) for(j=sum;j>=bag[i].m;j--) dp[j]=max(dp[j],dp[j-bag[i].m]*(1-bag[i].p)); for(i=sum;i>=0;i--) if(dp[i]>1-pro) { printf("%d\n",i); break; } } return 0;}
0 0
- Robberies hdu2955 01背包
- HDU2955:Robberies(01背包)
- hdu2955 Robberies (01背包)
- HDU2955 Robberies 01背包
- HDU2955-Robberies-01背包
- hdu2955 Robberies --01背包
- hdu2955 01背包 Robberies
- HDU2955 Robberies(01背包)
- hdu2955 Robberies 01背包 dp
- hdu2955---Robberies(01背包)
- hdu2955 Robberies (01背包)
- hdu2955 Robberies (01背包概率)
- hdu2955 Robberies(01背包)
- hdu2955 Robberies(01背包)
- hdu2955 Robberies(01背包)
- hdu2955 Robberies(另一种01背包)
- hdu2955---Robberies(概率做01背包)
- hdu2955 Robberies 01背包的变形
- 详解Android GPS 基站 WiFi 定位
- IOS中使用GData解析XML
- Android ViewPager的架构小结
- 音视频技术的UPNP支持
- 我的java web登录RSA加密
- HDU2955 Robberies 01背包
- L4操作系统(L4/Fiasco)
- 数据库SQL优化大总结之 百万级数据库优化方案
- J2SE基础篇——数据类型、执行过程、进制、编码
- iOS - NavigationController经常出现的问题
- Oracle Clusterware Cannot Start on all Nodes: Network communication with node <NAME> missing for 90%
- android蓝牙耳机及手咪开发
- 字符串验证码,数字验证码生成
- HTML5视频video