HDU 1864 最大报销额

在PyCharm中配置使用Anaconda环境 在PyCharm中配置使用Anaconda环境一、步骤1.Anaconda2.PyCharm总结 一、步骤 1.Anaconda 如未安装Anaconda可至其官网下载,学习使用个人版就可以了。 下载地址:https://www.anaconda.com/products/individual 1、打开Anaconda Navigator,点击Environments可以看到anaconda中已经有了默认的“base”环境,其中包含了大多数我们会用到的包,在PyCharm中可以直接使用该环境,而无需自行下载 阅读详情

传送门

01背包,有一点变形。
给一些发票(物品),每张发票都有一个报销额(价值),每张发票还有一个判断合不合法的过程(这题很坑,话都说不明白。它要求的是每张发票上的A,B,C每类都不大于600.0,而不是每一项),每张发票要么全报要么全不报。问你在总报销额不大于Q的情况下最大的总报销额是多少。

刚一看会发现一个问题,它没有一个显式的背包容量的概念。(当然,这道题可以把价值和重量当成一个东西,有人这样做出来了,但是我不想这样做,因为这题没有给明确的小数位数,还得猜)
既然它没给每件物品的重量,那么就用每张发票本身来表示,每张发票的重量都是1,背包容量就是发票的张数。

现在的问题变成:(在前i张发票可供选择的情况下,)选择不超过j张发票,可获得的最大报销额是多少。
这个问题变得很微妙,i,j的取值范围是一样的,但是意义不同。i是限制选取范围,j是限制选取数量。i的实际意义是id,j的实际意义是数量。

其实可以发现,因为每件物品的重量都是单位值1(能整除任何容量),所以这道题当j<=i时,其实都是默认恰好装满的。

最后,只要从大到小枚举张数就好了,碰见第一个不大于Q的值就是答案。

(不针对这道题:在求最大价值、已运行完毕的前提下,dp序列的值(背包容量从小到大)一定是递增的(不是严格递增)。而如果限制了恰好装满,则不满足)。

(如果这道题问不大于Q的情况下最多报多少张,该怎么求?(改成最小值的恰好装满,用最小值去拟合这个上限Q))


#include <cstdio>
#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>
#include <string>
#include <queue>
using namespace std;

double Q; int N;                               // 定义不同类型不能用逗号隔开,相同类型才可以
double p[31];
double dp[31];
bool invalid[31];
int num;

void init()
{
	fill(dp, dp + 31, 0.0);                    // 初始化double类型不要用memset
	memset(invalid, 0, sizeof invalid);
	num = 0;
}

int main()
{
	int a; char c; double b;                   //
	for (; ~scanf("%lf%d", &Q, &N);)
	{
		if (N == 0) break;
		init();
		for (int i = 1; i <= N; i++)
		{
			double A_sum = 0.0, B_sum = 0.0, C_sum = 0.0, sum = 0.0;
			scanf("%d", &a);
			for (; a--;)
			{
				scanf(" %c:%lf", &c, &b);      // 这里要吸收一个空格,非常重要!
				if (invalid[i]) continue;      // 还得等它输入完这张发票的其他项

				if (c == 'A') A_sum += b;      // 是一张上的单类不能超600,不是单项
				if (c == 'B') B_sum += b;
				if (c == 'C') C_sum += b;
				sum += b;
				if ((c != 'A' && c != 'B' && c != 'C') || (A_sum > 600.0 || B_sum > 600.0 || C_sum > 600.0) || sum > 1000.0)
				{
					invalid[i] = true;
					continue;
				}
			}
			if (!invalid[i])
			{
				p[i] = sum;
				num++;                         // 其实可以直接拿num当下标,下面就不用判断了
			}
		}

		for (int i = 1; i <= N; i++)
		{
			if (!invalid[i])
			{
				for (int j = num; j >= 1; j--)             // 每张发票的重量都是“1”
				{
					dp[j] = max(dp[j], dp[j - 1] + p[i]);
				}
			}
		}
		for (int i = num; i >= 0; i--)
		{
			if (dp[i] <= Q)
			{
				printf("%.2lf\n", dp[i]);
				break;
			}
		}
	}

	return 0;
}
老版QQ原生表情gif动态 这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。 立即下载

相关推荐

Android Geckoview实战:5分钟搞定JS与原生交互(附完整Demo代码)

本文详细介绍了在Android应用中使用GeckoView替代系统WebView,构建稳定高效的JavaScript与原生代码交互桥梁的实战方法。通过WebExtension架构,文章提供了从环境配置、扩展开发到Android端集成的完整步骤,并附有可运行的Demo代码,帮助开发者快速解决混合应用中的兼容性问题。

u5v6w7的博客 935

HDU 1864 最大报销额(DP,01背包)

http://acm.hdu.edu.cn/showproblem.php?pid=1864 最大报销额 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 14507    Accepted Submiss

fcbruce 1101

从光耦隔离到稳定驱动:信捷伺服与STM32的硬件设计陷阱与救赎

本文深入探讨了信捷伺服驱动器与STM32微控制器配合时的硬件设计关键问题,包括光耦隔离电路选型、电源电压选择、拨码开关设置等核心环节。针对伺服驱动器的稳定驱动需求,提供了从电路设计到抗干扰策略的完整解决方案,帮助工程师规避常见陷阱,提升工业控制系统的可靠性。

gold8的专栏 312

HDOJ 1864最大报销额

01背包

m0_58943508的博客 162

B站自动答题协议分析

使用Python写了一个自动答题机器人!基于接口协议实现且包含点选验证码识别

吴秋霖的博客 2652

别白忙活!EAAI投稿避坑指南:5条红线碰就拒,工程应用重点划重点

EAAI投稿避坑指南:5条红线与工程应用要点 投稿《Engineering Applications of Artificial Intelligence》(EAAI)需特别注意5条红线,否则直接拒稿:1)避免提出新隐喻元启发式算法,应聚焦具体工程应用;2)摘要须明确区分AI贡献与工程应用;3)标题和摘要禁止使用未定义缩写;4)必须采用单栏格式;5)关键词不能包含缩写。此外,论文需突出AI方法在工程实践中的创新与落地价值,建议补充实际工程数据、部署成本分析和与传统方法的对比。投稿前务必逐项核查这5条要求,以

ZhangJiqun&191cm&85kg 3207

HDU1864:最大报销额(01背包)

Problem Description 现有一笔经费可以报销一定额度的发票。允许报销的发票类型包括买图书(A类)、文具(B类)、差旅(C类),要求每张发票的总额不得超过1000元,每张发票上,单项物品的价值不得超过600元。现请你编写程序,在给出的一堆发票中找出可以报销的、不超过给定额度的最大报销额。   Input 测试输入包含若干测试用例。每个测试用例的第1行包含两个正数 Q

ACM!荣耀之路! 5074

【光子AI / Photon.AI】manus 通用 Agent 的实现核心技术原理与应用

摘要 Manus是一款由国内团队开发的通用AI Agent,其核心技术原理基于多智能体协作架构、云端全能沙箱、规划-执行-反思循环等系统工程方法。与传统的对话式AI不同,Manus能够在独立的Linux虚拟机环境中自主规划并执行复杂任务,通过编写和运行代码来解决问题,具备强大的纠错能力和工具使用能力。 核心应用场景包括深度行业研究、自动化办公、生活助理、辅助编程和跨平台信息整合等。Manus的工程化落地优势体现在沙箱环境、多智能体调度和容错机制等方面,使其能够完成需要多步骤操作和多种工具调用的复杂任务,将A

AI天才研究院 667

题目1025:最大报销额

#include #include #include #include #include #include #include #include #include #include using namespace std; double price[35]; double limit; int size; double ans; void dfs(int x,double cost) {

Aden的专栏 420

QT6实现USB摄像头接入显示与抓拍功能实现

QT实现USB摄像头接入显示 一、UVC协议简介 UVC全称是USB Video Class(USB视频类),是一种标准化的USB视频设备通信协议,它定义了摄像头与主机之间的数据传输协议和格式。 UVC协议的出现,解决了摄像头厂商之间互不兼容,以及摄像头应用开发与平台之间的散乱问题。 UVC标准是由USB-IF主导制定的,目前最新的版本是UVC 1.5,UVC的缺省设置类容易实现,不需要额外的驱动程序。

热土程序园,利他愉己~ 3416

Istio ICA考试之路---2-2

找到dr部分,这部分可以在mirroring里找也可以和题2-1一样在Traffic Management的dr里复制,内容都一样。此题之后都是在cluster-2上操作,所以就不需要再切换了.之后的几题2.1节就忽略掉了。可以看到,80%的流量被镜像到了dev上,实际考试这步可以忽略。看到ex-ip是192.168.126.220。获取gw,把gateways加入到vs配置中。获取istio-ingress的ex-ip。就获得了这样一个模板文件。查看2个pod的日志。

Q先生 854

动态规划:HDU1864-最大报销额(处理带小数的dp问题)

最大报销额 Time Limit: 1000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others) Description 现有一笔经费可以报销一定额度的发票。允许报销的发票类型包括买图书(A类)、文具(B类)、差旅(C类),要求每张发票的总额不得超过1000元,每张发票...

weixin_30875157的博客 522

【脑电信号】脑电信号EEG形态学滤波处理【含Matlab源码 4023期】

脑电信号EEG形态学滤波处理 完整的代码,包运行;运行操作视频见优快云资源!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 823

HDU 1864 最大报销额 背包DP

最大报销额 HDU - 1864 有三类可以报销的发票,要求每张发票的总额不超过 100010001000,每张发票上单项物品不得超过 600600600,求在给出的一堆发票中可以报销的最大报销额。 首先判断哪些发票是符合要求的,只处理符合要求的发票。然后令 dp[i]dp[i]dp[i] 表示包含第 iii 张发票能够得到的最大报销额,则对于 0≤j≤i−10\le j\le i-10≤j≤i−...

wineandchord 172

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Camera2Demo

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

HDU 1864 最大报销额 01背包

HDU 1864 最大报销额 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 17530    Accepted Submission(s): 5141 Problem Description 现有一笔经费可以报销

TaoSama's Microcosm 462

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

最大报销额 HDU - 1864(DP+01背包)

最大报销额 HDU - 1864 点击跳转↑ 题设:多组输入,每组输入一对Q和N,分别代表当前的公费,和需要报销的账单总数。接下来N行,每行开始一个m,接下来是m项物品的名称和价格。求:在所有符合报销规则的账单中,任意组合,让总报销额不超过公费且最大。 思路:简单的背包,但是有坑,首先需要读懂题意,账单的报销规则为: 1-允许报销的发票类型包括买图书(A类)、文具(B类)、差旅(C类) ==>单张账单中,只能出现“A”,“B”,“C”三种类型的物品 2-每张发票的总额不得超过1000元 ==>

自伤无色的博客 544

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

hdu 1864 最大报销额

http://acm.hdu.edu.cn/showproblem.php?pid=1864hdu  1864  最大报销额            题目链接: DFS 题目分析:求有上限的数列最大和,用DFS来做就可以。对题目的理解应该大致有这么几点,发票整张报销,所以有一条不合格,整张就废了;1000是每张发票的总额上限,600是每一项(种类ABC)的上限,还有个总上限,是要输入的。根据三个

slicer的技术交流栈 944

[HDU]1864最大报销额[dp][贪心?怎么可能!]

题目链接:[HDU]1864最大报销额[dp]or[贪心] 题意分析:题意就不再分析了。需要注意的事,题目中有一句『单项物品的价值不得超过600元』等价于『单类物品总价值不超过600元』。刚开始还以为是单个物品Orz。 解题思路:这次最大报销额是一个浮点数,单纯的整数背包就不起作用了。可以考虑使用乘100后变为整数的方法,进行01背包求解。 (网上流传的两种方法:一种DP:转移方

闲停 646

hdu1864 最大报销额

hdu1864 最大报销额

李典金 320

HDU 1864 最大报销额 (01背包)

题目链接:HDU 1864 最大报销额 01背包。 把张数当成背包,状态转移方程:f[j]=max(f[j],f[j-1]+v[i]),f[j]表示把j张装进背包的最大报销额。 这题这么做还是有点问题,比如这组数据: 100.00 5 1 A:5 1 B:20 1 C:24 1 A:30 1 A:60 f[3]为114,f[2]为90,f[3]超过了100.00,那么就会输

fobdddf的专栏 607

HDU 1864 最大报销额(01背包)

HDU 1864 最大报销额(01背包) http://acm.hdu.edu.cn/showproblem.php?pid=1864 题意:        现有一笔经费可以报销一定额度的发票。允许报销的发票类型包括买图书(A类)、文具(B类)、差旅(C类),要求每张发票的总额不得超过1000元,每张发票上,单项物品的价值不得超过600元。现请你编写程序,在给出的一堆发票中找出可以报销的、不

code 3257

HDU1864:最大报销额

经典01背包例题

innounce的博客 390

hdU 1864 最大报销额

最大报销额 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 11181    Accepted Submission(s): 3067 Problem Description 现有一笔经费可以报销一定额度的发票。允

dongdongzhang_的专栏 551

hdu1864 最大报销额 01背包

最大报销额Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 29672    Accepted Submission(s): 9092Problem Description现有一笔经费可以报销一定额度的发票。允许报销的发票类型包括买图书(A类...

popcjz的博客 1321

hdu 1864 最大报销额 0-1背包

/* hdu 1864 最大报销额 题意:每张发票总额不得超过1000,单项物品不得超过600(一项物品可能出现多次),除ABC类外,其他的不能报销(含多余项的发票整个儿不能报销) 所有价格扩大100倍,按发票经行背包 */ #include #include int dp[3000000]; int wu[100],wug; int zong; int find() { int n,i,a,b

1054

hdu1864 — 最大报销额

题目大意:给出n张发票,每张发票可报销的类型只有 A、B、C三类,若有其他不予报销,其中可报销的每张发票总额不超过1000,单项消费金额不超过600,给出报销额度,问可报销的最大总额 思路分析:该题花费即价值,在输入时进行筛选,不符合条件的发票不进行处理,符合条件的将该张发票的总金额计算出来,为方便处理,将所有涉及金额数目*100 方程为 f [ j ] = max ( f [ j ]

不许动我的松子的博客 452
上一篇: HDU 2955 Robberies
下一篇: HDU 1231 最大连续子序列
Crossing over
博客等级 码龄10年 6粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值