【01背包变形】Robberies HDU 2955
2024-09-05 20:38:50
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背包变形
最新文章
- Android—Socket服务端与客户端用字符串的方式互相传递图片
- Play Framework 完整实现一个APP(五)
- mysql 加锁测试
- “ifstream” 未声明的标识符
- LESS速查
- 熟悉css/css3颜色属性
- 【液晶模块系列基础视频】4.2.X-GUI图形界面库-画矩形函数简介
- 《c程序设计语言》读书笔记--统计换行数,空格数,tab数
- ListView多选操作模式详解CHOICE_MODE_MULTIPLE与CHOICE_MODE_MULTIPLE_MODAL
- FlashPaper组件——api
- PHP+MySQL Smarty简单分页显示示例
- 批处理命令 For循环命令具体解释!
- drupal 8 查看数据库用户名密码
- Linux下如何阅读开源项目
- HBase之Table.put客户端流程(续)
- Alpha 冲刺 (9/10)
- Java 详解 JVM 工作原理和流程
- いっしょ / Be Together (暴力枚举)
- Swagger UI教程 API 文档神器 搭配Node使用
- mysql安装错误解决办法
热门文章
- 动手实现 React-redux(二):结合 context 和 store
- poj2385 Apple Catching
- git 配置免密上传,配置ssh key
- 计算1至n的k次方的和
- Summary of 2016 International Trusted Computing and Cloud Security Summit
- Android(java)学习笔记164:开发一个多界面的应用程序之不同界面间互相传递数据(短信助手案例)
- gym 100947I (求因子)
- Python 中print 和return 的区别
- Python3简明教程(一)—— 开始Python之旅
- DROP DOMAIN - 删除一个用户定义的域