题目链接

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

题意

有n家银行,每家银行有两个属性:钱数m,概率p,p表示抢这家银行被逮着的概率。有一个人想抢银行,他认为只要在他抢一些银行后,被逮着的概率(指抢完所有银行被逮着的概率)小于pm就可以抢,求这个人最多可以抢多少钱。

思路

01背包问题,这题要注意钱数是背包容量,成功逃走的概率为价值(如果反过来会发现代码没办法写,因为反过来数组dp下标为小数)。数组dp[i]表示在抢的钱数为i的情况下,成功逃走概率的最大值。求出成功逃走概率的最大值后,1-最大值即为被逮着概率的最小值,再拿最小值与pm比较即可。此外还要注意dp数组的初始化。

代码

 1 #include <algorithm>
 2 #include <iostream>
 3 #include <cstring>
 4 #include <cstdio>
 5 using namespace std;
 6
 7 const int N = 110;
 8 const int M = 100 * 100 + 10;
 9 double p[N];
10 int m[N];
11 double dp[M];
12
13 int main()
14 {
15     //freopen("hdoj2955.txt", "r", stdin);
16     int t, n;
17     double pm;
18     cin >> t;
19     while (t--)
20     {
21         int sum = 0;
22         cin >> pm >> n;
23         for (int i = 0; i < n; i++)
24         {
25             cin >> m[i] >> p[i];
26             p[i] = 1 - p[i];    //成功逃走的概率
27             sum += m[i];
28         }
29
30         memset(dp, 0, sizeof(dp));
31         dp[0] = 1;    //没有抢钱,成功逃走的概率为1
32         for (int i = 0; i < n; i++)
33         {
34             for (int j = sum; j >= m[i]; j--)
35                 dp[j] = max(dp[j], dp[j - m[i]] * p[i]);
36         }
37
38         for (int i = sum; i >= 0; i--)
39             if (1 - dp[i] < pm)
40             {
41                 cout << i << endl;
42                 break;
43             }
44     }
45     return 0;
46 }

转载于:https://www.cnblogs.com/sench/p/8017431.html

hdoj2955 Robberies(01背包)相关推荐

  1. HDOJ2955 Robberies(01背包,概率)

    http://acm.hdu.edu.cn/showproblem.php?pid=2955 这道DP题WA了. 今天看了一下,WA在了double max(int x,int y)上,x和y都应该是 ...

  2. HDU - Robberies(01背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2955 Time Limit: 2000/1000 MS (Java/Others) Memory Li ...

  3. HDOJ 2955 Robberies (01背包)

    10397780 2014-03-26 00:13:51 Accepted 2955 46MS 480K 676 B C++ 泽泽 http://acm.hdu.edu.cn/showproblem. ...

  4. 暑假N天乐 —— 01背包及变形

    暑假集训的第一天 第二天了. 决定还是先把基础巩固一下好了,万一后面训练赛出事故更尴尬. 所以今天的主题是 -- 01背包及变形 动态规划概念 动态规划(Dynamic programming,DP) ...

  5. HDU 2955 Robberies(概率DP,01背包)题解

    题意:给出规定的最高被抓概率m,银行数量n,然后给出每个银行被抓概率和钱,问你不超过m最多能拿多少钱 思路:一道好像能直接01背包的题,但是有些不同.按照以往的逻辑,dp[i]都是代表i代价能拿的最高 ...

  6. 01背包经典例题详解

    转载自点击打开链接 首先01背包题目的雏形是 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. 从这个题目中可以看出,01背包的特点 ...

  7. 【背包专题】01背包

    暑假集训开始了,按照队里的分配,我是弄DP的,嘛,于是我又一次的开始了从01背包开始学习,昨天将杭电的几道01背包重新做了一遍,下面讲讲我自己对于01背包的理解. 首先01背包题目的雏形是 有N件物品 ...

  8. hdu 2955 01背包

    http://acm.hdu.edu.cn/showproblem.php?pid=2955 如果认为:1-P是背包的容量,n是物品的个数,sum是所有物品的总价值,条件就是装入背包的物品的体积和不能 ...

  9. 浅说——九讲背包之01背包

    所谓九讲,也就是: 0/1背包 0/1背包降维 完全背包 多重背包(二进制优化) 混合背包 二维费用背包 分组背包 有依赖的背包 背包的方案总数\背包的具体方案路径 0/1背包: [问题描述](经典) ...

  10. Codeforces Round #104 (Div. 2) E DP(01背包模型) +组和+除法取模求逆元

    题意: 规定只包含4或7的数为幸运数字,给定n个数的序列,求他的子序列,使得该子序列的长度为k并且满足该子序列中不存在相同的两个幸运数字.问一共寻在多少种可能.(只要该数的下标不同则认为是不同的序列) ...

最新文章

  1. vmware迁移问题
  2. 外企面试官们爱提的十个问题
  3. Linux上操作Docker守护态运行
  4. Android NDK学习(3)使用Javah命令生成JNI头文件 .
  5. Spring Boot 10:处理Json数据中的null值
  6. lnmp构架——对tomcat详解
  7. 摄影测量--测边交会
  8. BZOJ 2436 Noi嘉年华(优化DP)
  9. java性能、代码优化
  10. wordpress后台加载速度异常缓慢排查记录(原创)
  11. 2022.4.7网页一直在加载中,无提示
  12. mysql校验规则居民身份证号_身份证号规则及校验
  13. PyQt4安装使用以及pycharm环境配置
  14. 不同编程语言语言的适用场景
  15. 计算机自动维护有用吗,Win10系统关闭自动维护功能提高系统运行速度
  16. Flutter流畅性fps计算
  17. 进制转换对学计算机的意义,浅析进制转换在计算机应用中的技巧.docx
  18. 程序员对于35岁的担忧:未来真的没有什么好的前景吗?
  19. ubuntu wps缺少字体_一个字体:系统风汜霰更纱黑
  20. 有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母,小写字母,数字,空格以及其他字符的个数。谭浩强《C程序设计课后习题》第6章第10题。

热门文章

  1. imu相机标定_【光电视界】多传感器融合标定方法汇总
  2. php语句insert,SQL INSERT INTO
  3. 特征图注意力_CV注意力机制论文阅读笔记
  4. keyshot分辨率多少合适_分辨率单位及换算详解
  5. python 函数定义位置_PYTHON--函数定义
  6. Unity 使物体朝向某个方位
  7. 基于etcd实现大规模服务治理应用实战
  8. 高16位低16位什么意思_为什么模拟量模块16位要比13位转换精度高,高多少?
  9. 银行客户交易行为预测:如何降低内存的使用量
  10. 【RLchina第二讲】 Foundations of Reinforcement Learning