[HDU 2955 Robberies] 入门DP

物联网平台开发实战:从技术选型到架构演进 物联网作为连接物理世界与数字世界的核心技术,其架构通常分为感知层、网络层与平台层。平台层作为物联网的“大脑”,承担着设备接入、数据处理与业务逻辑实现的核心功能,其技术栈与后端开发高度重叠,但需特别关注物联网协议与海量设备接入场景。在工程实践中,消息队列(如Kafka)用于应对数据洪峰,时序数据库(如InfluxDB)则针对时间序列数据存储优化,而微服务架构与全链路监控是保障系统稳定性的关键。本文以物联网平台后端开发为例,通过一个完整的智能监控Demo项目,串联起从设备数据采集、MQTT传输、Spring B 阅读详情

题目连接  http://acm.hdu.edu.cn/showproblem.php?pid=2955

Robberies

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 16598    Accepted Submission(s): 6101


Problem Description
The aspiring Roy the Robber has seen a lot of American movies, and knows that the bad guys usually gets caught in the end, often because they become too greedy. He has decided to work in the lucrative business of bank robbery only for a short while, before retiring to a comfortable job at a university.


For a few months now, Roy has been assessing the security of various banks and the amount of cash they hold. He wants to make a calculated risk, and grab as much money as possible.


His mother, Ola, has decided upon a tolerable probability of getting caught. She feels that he is safe enough if the banks he robs together give a probability less than this.
 

Input
The first line of input gives T, the number of cases. For each scenario, the first line of input gives a floating point number P, the probability Roy needs to be below, and an integer N, the number of banks he has plans for. Then follow N lines, where line j gives an integer Mj and a floating point number Pj .
Bank j contains Mj millions, and the probability of getting caught from robbing it is Pj .
 

Output
For each test case, output a line with the maximum number of millions he can expect to get while the probability of getting caught is less than the limit set.

Notes and Constraints
0 < T <= 100
0.0 <= P <= 1.0
0 < N <= 100
0 < Mj <= 100
0.0 <= Pj <= 1.0
A bank goes bankrupt if it is robbed, and you may assume that all probabilities are independent as the police have very low funds.
 

Sample Input
  
3 0.04 3 1 0.02 2 0.03 3 0.05 0.06 3 2 0.03 2 0.03 3 0.05 0.10 3 1 0.03 2 0.02 3 0.05
 

Sample Output
  
2 4 6
 

Source
IDI Open 2009


入门DP(正适合我这种菜鸡。。),题意告诉你小偷不能忍受的被捕概率和几个银行,接下来是每个银行的价值和被抓概率;
一开始把概率当做背包容量相加了。。错了好久,对不起高中数学老师。。
若抢劫A银行被抓概率为p1,抢劫B银行被抓概率为p2,那么抢劫A和B银行被抓概率应该为1-(1-p1)*(1-p2)
而dp储存的是当前价值的逃生几率,那么可以推出动态方程dp[j]=max(dp[i],dp[i-val[i]]*(1-p[i]))

那么代码如下。。


#include<stdio.h>
#include<string.h>
double max(double a, double b)
{
	return a > b ? a : b;
}
typedef struct node
{
	int dis;
	double p;
};
node nod[101];
int t;
double dp[10010];
int main()
{
//	freopen("input.txt", "r", stdin);
	int sum, m;
	double p;
	scanf("%d", &t);
	while (t--)
	{
		memset(dp, 0, sizeof(dp));  //初始化
		dp[0] = 1;   //抢劫0元的逃生概率为1,这个必须要写
		sum = 0;

		scanf("%lf%d", &p, &m);
		for (int i = 0; i < m; i++)
		{
			scanf("%d%lf", &nod[i].dis, &nod[i].p);
			sum += nod[i].dis;
		}

		for (int i = 0; i < m; i++)
			for (int j = sum; j >= nod[i].p; j--)
				dp[j] = max(dp[j], dp[j - nod[i].dis] * (1 - nod[i].p));

		for (int i = sum; i >= 0; i--)
			if (1 - dp[i] < p){  //金钱从大往小遍历一边,只要被抓的概率不超过题目给的概率就输出
				printf("%d\n", i);
				break;
			}
	}
	return 0;
}



LabVIEW实战:3步搞定Excel模板数据填充(附完整VI源码) 本文提供了一个高效的LabVIEW Excel报表自动化方案,通过使用命名区域定位和动态文件管理,实现数据的精准、动态填充。文章详细阐述了如何构建可复用的数据填充引擎,包括文本、表格数据及图表的写入,并分享了主程序流程、错误处理及性能优化等进阶技巧,帮助工程师彻底摆脱手动操作,提升工作效率。 阅读详情

相关推荐

麒麟V10系统命令实战指南:从入门到精通

本文为麒麟V10操作系统用户提供了一份从入门到精通的命令行实战指南。内容涵盖文件管理、进程监控、网络诊断、文本处理及系统管理等核心场景,旨在帮助用户转变思维,掌握高效解决实际问题的系统命令技巧,从而提升在麒麟V10环境下的运维与工作效率。

sat99的博客 594

hdu 3530 单调队列水题

单调队列水题

zxf654073270的专栏 628

Qt5.15.2安卓开发环境配置保姆级教程(含JDK8、SDK33、NDK21.4及Gradle国内镜像避坑指南)

本文提供Qt5.15.2安卓开发环境配置的完整教程,涵盖JDK8、SDK33、NDK21.4及Gradle国内镜像设置,帮助开发者快速搭建开发环境并避免常见问题。通过详细步骤和实战技巧,解决依赖冲突、网络超时等难题,提升开发效率。

weixin_28730353的博客 203

HDUOJ 2955 Robberies

HDUOJ 2955 Robberies 题目链接 Problem Description The aspiring Roy the Robber has seen a lot of American movies, and knows that the bad guys usually gets caught in the end, often because they become too greedy. He has decided to work in the lucrative business

旺崽的博客 2582

Spring Boot日志可视化实战:5分钟搞定Promtail采集与Grafana查询(避坑指南)

本文详细介绍了如何通过Promtail和Grafana实现Spring Boot日志的可视化查询,提供从日志采集到高效查询的全流程实战指南,重点解决部署中的常见问题。内容包括Logback配置、Promtail日志采集、Grafana的LogQL查询技巧及生产环境优化建议,帮助开发者快速定位和解决日志问题。

weixin_42526015的博客 106

详解APM的开方控制器sqrt_controller

前言 前面说过,sqrt_controller是对P项进行整定用途的,目的就是让P项的控制响应“软”下来,实际上就是一个经过改进的P控制器。读懂了sqrt_controller,那么你对APM的P控制器就了解得差不多了。 仅讨论P控制器,sqrt_controller的作用就是设定一个量linear_dist,以这个量的正负值为分界线划分出一个线性区域范围,在这个范围内表示误差量还很小,遵循Kp*error计算方式输出控制量。 超过linear_dist后,表明误差较大,此时不能由着误差单纯按照线性方式乘以

moumde的博客 4893

Robberies HDU - 2955

The aspiring Roy the Robber has seen a lot of American movies, and knows that the bad guys usually gets caught in the end, often because they become too greedy. He has decided to work in the lucrative...

Foolishman的博客 340

智慧杯 考试必备

2019.4. 强密码 描述 我们称一个密码是强密码,当且仅当它满足以下所有条件: 由 8 − 16 个字符组成 至少包含一个大写字母 (A-Z) 至少包含一个小写字母 (a-z) 至少包含一个数字 (0-9) 至少包含一个特殊符号 (! @ #$ % & * _ +) 娇娇发现她现在的密码好像不是强密码,请你帮她计算一下最少添加几个 字符可以变成强密码? 输入 输入仅一行,一个字符串,表示娇娇当前的密码 输出 输出一个数表示答案 如果不需要添加任何字符就已.

Fairy1208的博客 2861

HDU 2955 Robberies (转化概率-01背包)

【题目链接】:click here~~ 代码: /* * Problem: HDU No.2955 * Running time: 46MS * Complier: G++ * Author: ACM_herongwei * Create Time: 15:01 2015/9/9 星期三 * zeroonebags * 用成功逃走的概率当做价值!银行的总钱数当做背包容量!单个银行的钱数体积,然

herongwei 的 BLOG 1502

Trustzone/TEE/安全 面试100问-目录

关键词:cache学习、mmu学习、cache资料、mmu资料、arm资料、armv8资料、armv9资料、 trustzone视频、tee视频、ATF视频、secureboot视频、安全启动视频、selinux视频,cache视频、mmu视频,armv8视频、armv9视频、FF-A视频、密码学视频、RME/CCA视频、学习资料下载、免费学习资料、免费 周贺贺,baron,代码改变世界ctw,Arm精选, 资深安全架构专家,十年手机安全/SOC底层安全开发经验。擅长trustzone/tee安全产品的设计

baron-周贺贺-代码改变世界ctw 649

RK3588 DDR5 方案

RK3588 DDR5方案支持多种LPDDR5/LPDDR5X内存型号,包括美光、三星、海力士、江波龙和佰维等品牌。文档详细列出了已验证的DDR5内存规格,涵盖2GB-16GB容量范围,提供组织形式、封装类型和测试状态等信息。其中美光型号最全面,支持12GB/16GB大容量方案。部分型号处于测试验证阶段(T/A),需量产进一步确认性能。该方案为RK3588平台开发提供可靠的内存选型参考。

501846585_QQAndroid_java 1081

hdu 2955:Robberies(概率dp,也可以叫01背包变形)

hdu 2955:Robberies(概率dp,也可以叫01背包变形) Problem Description The aspiring Roy the Robber has seen a lot of American movies, and knows that the bad guys usually gets caught in the end, often because they ...

serendipity的博客 224

2026年全国青少年信息素养大赛算法应用主题赛C++样题及答案解析

2026年全国青少年信息素养大赛算法应用主题赛C++样题

王老师青少年编程 3712

hdu 2955 Robberies 01背包 Java

hdu 2955 Robberies 这道题自己写得挺久,最坑的一点是自己一开始是用 StreamTokenizer 类读取的,但是一直错,后来用 Scanner 类读取就 accept 了,搞不懂。 解这道题有以下关键点: 第一:一开始想的是用概率来作为背包容量,但是概率是浮点数,所以只能用钱来作为背包容量。 第二:题目中给出的都是被抓的概率,概率之间应该是相乘而不是相加,与一般的01背包不一样。 第三:dp[0] 注意初始化为 1, 什么都不偷逃跑的概率为 1。 import java.io.IOExc

weixin_46621409的博客 163

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

HDU2955 Robberies 一道01背包问题

HDU 2955 这一题,很有趣味。 首先,如果是按照照常的思路,在内层for循环,没办法遍历背包容量(概率),概率是double/float型的数据。 所以,将价值看成背包容量,在寻找可行的最大的价值时,将价值从大到小遍历,出现满足的概率条件时,便可以结束,此时的背包容量(价值),就是最终结果。 另外,注意,这么多银行中只要有一个银行抓住了他,就没有逃脱成功。 //HDU 2955...

117瓶果粒橙 283

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

[HDU2955]Robberies[dp]

题目链接:[HDU2955]Robberies[dp] 题意分析:Roy要去偷银行的钱,每个银行都存在被抓住的概率。他麻麻担心他被抓,所以如果他抢劫的银行被抓住的概率大于P,她麻麻就不放心了。所以,我们要做的事情就是在小于妈妈担心概率的情况下,帮助Roy拿尽可能多的钱$$ :D 解题思路:钱和概率,很容易想到01背包问题。问题是,人家01背包给的都是整数,这里的概率是浮点数,循环都循环得蛋

闲停 510

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

hdu2955 Robberies 浮点数背包变形

http://acm.hdu.edu.cn/showproblem.php?pid=2955 #include &lt;bits/stdc++.h&gt; using namespace std; const int maxn=10005; const int inf=0x3f3f3f3f; int n,sum; double P; double dp[maxn]; struct st{ i...

skykone1的博客 388

hdu2955 Robberies

hdu2955 Robberies

李典金 338

hdu2955 Robberies (01背包)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2955 最小风险概率=1-最大安全概率 #include #include #define MAXN 10002 double dp[MAXN],weight[MAXN]; int val[MAXN]; int main() { int n,test,i,j,sum; d

不可不戒 686

hdu 2955 Robberies (01背包)

链接:http://acm.hdu.edu.cn/showproblem.php?pid=2955 思路:一开始看急了,以为概率是直接相加的,wa了无数发,这道题目给的是被抓的概率,我们应该先求出总的逃跑概率,1-逃跑概率就是最后被抓的概率,dp的话,以所有银行总金额为容量,以单个银行的金额为体积,以逃跑的概率为价值,跑01背包,最后找一下小于被抓概率的最大金额。 实现代码: #incl...

weixin_30252155的博客 109

(01背包)hdu 2955 Robberies

题目 hdu2955 题意: 给出 n 家银行的金额和被抓的概率,求出不超出被抓概率 p 的最大抢劫金额。 思路: 如果把被抓概率看成背包容量进行dp,则wa, 这里犯了一个常识的错误,被抓概率 = 被抓概率1 + 被抓概率2,其实这是错的。 举个例子,某彩票的中奖概率是50%,按照上面的计算方法(中奖概率 = 中奖概率1 + 中奖概率2),那么买两张彩票则必中奖(两张彩票中奖概率 = 50% + 50% = 100%),这是不科学的。 实际上两张彩票中奖概率为75%(两张彩票中奖概率 = 第一张中第二张不

ymxyld的博客 173

hdu 2955 Robberies

hdu  2955  Robberies                 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2955 题目大意:劫匪Roy the Robber打算大干一票然后安度晚年,估计了n个银行的储备金总数,及其被抓概率(抢一次必然就全抢走,然后就要承担在这个银行被抓的危险了)。其母有些担心,给规定了个最大被抓概率忍受上限,我们要

slicer的技术交流栈 761

HDU 2955 Robberies(DP:01背包)

HDU 2955 Robberies(DP:01背包) 题意:给你一个被抓的概率P,要求去抢银行的被抓概率要小于P,每个银行有一个价值和一个被抓概率Pi,问你在被抓概率的前提下,能获得的最大价值. 分析:由于各个银行的被抓概率独立,所以要用独立概率的乘法计算总的被抓概率. 假设抢了1,2,3银行,被抓概率分布为P1,P2,P3.那么总的被抓概率是:1-(1-P1)*(1-P2)*(1-P3).

code 750

HDU2955-Robberies

http://acm.hdu.edu.cn/showproblem.php?pid=2955 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; double q[105],dp[10005]; int m[105]; int main(void...

weixin_30794491的博客 106

hdu 2955 Robberies dp

题意:Roy抢银行,n个银行中每个银行有val【i】的钱,Roy在这个银行被抓的概率为p【i】,而Roy有一个安全线P,当Roy抢银行的安全程度在P以内使安全的,否则就会被抓。问Roy不被抓时最多能抢多少钱 //设dp【i】表示安全情况下偷i钱 的最大安全程度。在P以内是安全的,则在1-P要被抓,所以有dp【n】>=1-P。p【i】表示被抓的概率,则1-p【i】为安全的 那么可以得到dp[j]

uuuuuu 397

HUD 2955 Robberies

Robberies 题目链接 最新发现的HDU一道水题~在最后dp[i]>=W,即使没有写等于号也能AC。。。 //#include <bits/stdc++.h> #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include &...

Vincy_King 188
下一篇: [HDU 1864 最大报销额] 入门DP
chenningGo
博客等级 码龄11年 1粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值