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

【题意】

有一个强盗要去几个银行偷盗,他既想多抢点钱,又想尽量不被抓到。已知各个银行

的金钱数和被抓的概率,以及强盗能容忍的最大被抓概率。求他最多能偷到多少钱?

【思路】

01背包:每个物品代价是每个银行钱的数目,物品的价值是在该银行不被抓的概率 (1-被抓概率),背包容量是所有银行钱的总和。01背包求dp[i]表示获得i的钱不被抓的最大概率。最后从大到小枚举出 dp[i]>=(1-P)这个i就是答案了。

【AC】

 #include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue> using namespace std;
typedef long long ll;
const int maxn=1e2+;
double P;
int n;
int w[maxn];
double p[maxn];
double dp[];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%lf%d",&P,&n);
int sum=;
for(int i=;i<=n;i++)
{
scanf("%d%lf",&w[i],&p[i]);
sum+=w[i];
}
P=-P;
for(int i=;i<=sum;i++) dp[i]=;
dp[]=;
for(int i=;i<=n;i++)
{
for(int j=sum;j>=w[i];j--)
{
dp[j]=max(dp[j],dp[j-w[i]]*(-p[i]));
}
}
for(int i=sum;i>=;i--)
{
if(dp[i]>P)
{
printf("%d\n",i);
break;
}
}
}
return ;
}

01背包变形

最新文章

  1. Android—Socket服务端与客户端用字符串的方式互相传递图片
  2. Play Framework 完整实现一个APP(五)
  3. mysql 加锁测试
  4. “ifstream” 未声明的标识符
  5. LESS速查
  6. 熟悉css/css3颜色属性
  7. 【液晶模块系列基础视频】4.2.X-GUI图形界面库-画矩形函数简介
  8. 《c程序设计语言》读书笔记--统计换行数,空格数,tab数
  9. ListView多选操作模式详解CHOICE_MODE_MULTIPLE与CHOICE_MODE_MULTIPLE_MODAL
  10. FlashPaper组件——api
  11. PHP+MySQL Smarty简单分页显示示例
  12. 批处理命令 For循环命令具体解释!
  13. drupal 8 查看数据库用户名密码
  14. Linux下如何阅读开源项目
  15. HBase之Table.put客户端流程(续)
  16. Alpha 冲刺 (9/10)
  17. Java 详解 JVM 工作原理和流程
  18. いっしょ / Be Together (暴力枚举)
  19. Swagger UI教程 API 文档神器 搭配Node使用
  20. mysql安装错误解决办法

热门文章

  1. 动手实现 React-redux(二):结合 context 和 store
  2. poj2385 Apple Catching
  3. git 配置免密上传,配置ssh key
  4. 计算1至n的k次方的和
  5. Summary of 2016 International Trusted Computing and Cloud Security Summit
  6. Android(java)学习笔记164:开发一个多界面的应用程序之不同界面间互相传递数据(短信助手案例)
  7. gym 100947I (求因子)
  8. Python 中print 和return 的区别
  9. Python3简明教程(一)—— 开始Python之旅
  10. DROP DOMAIN - 删除一个用户定义的域