Robberies&&http://acm.hdu.edu.cn/showproblem.php?pid=2955

http://acm.hdu.edu.cn/showproblem.php?pid=2955

这一题算是0-1背包的变种,,通过构造背包,,来求在满足情况的条件下,背包的最大容量。。。

思路:题目给出我们被抓的最大概率。即给出不被抓的最小概率,因此我们可以构造dp来存不被抓的最大概率。。以所有银行的钱为背包容量,以(1-p)表示背包的价值,从而求对应背包的最大价值。。。。

#include<iostream> #include<string.h> #include<algorithm> using namespace std; typedef struct { int a; double b; }Node; Node s[101]; double dp[10001];//抢i元不被抓的最大概率 int main() { int Case; cin>>Case; while(Case--) { int n; double p; cin>>p>>n; p=1-p; //不被抓的最小概率 int sum=0; memset(dp,0,sizeof(dp)); for(int i=0;i!=n;++i) { cin>>s[i].a>>s[i].b; sum+=s[i].a; } dp[0]=1;//偷0元钱不被抓的概率肯定为1了,,, for(int i=0;i<n;++i) for(int j=sum;j>=s[i].a;--j) dp[j]=max(dp[j],dp[j-s[i].a]*(1-s[i].b)); for(int i=sum;i>=0;--i) if(dp[i]>p) { cout<<i<<endl;break;} }return 0; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值