HDU 1864 最大报销额

有限元分析必看:如何用ANSYS检查关键区域的网格质量(附操作截图) 本文聚焦有限元分析中决定仿真精度的关键环节,详细讲解了如何利用ANSYS Workbench对关键区域进行网格质量检查与优化。文章提供了从思维转变、实战操作到指标解读的完整流程,强调通过命名选择、Worksheet过滤器等工具实现定向检查,并给出了针对结构分析的关键区域网格质量阈值建议,帮助工程师提升仿真结果的可靠性与效率。 阅读详情

传送门

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;
}
QT应用编程: 编写低功耗BLE蓝牙调试助手(Android系统APP) 一、环境介绍 QT版本: 5.12.6 编译环境: win10 64位 目标系统: Android 完整工程源码下载地址(包含APK文件):https://download.youkuaiyun.com/download/xiaolong1126626497/19051696 二、功能介绍 本软件是一款BLE蓝牙串口调试助手,支持常规的发送和接收调试,BLE是低功耗类型蓝牙,在智能家居、物联网领域使用较多。BLE低功耗蓝牙一般不能直接使用手机进行连接,手机蓝牙默认都是工作在传统蓝牙模式,无法直接连接BL.. 阅读详情

相关推荐

Unity 机械臂控制(二)——从碰撞检测到姿态解算:实现精准抓取

本文详细介绍了Unity中机械臂控制的实现方法,从碰撞检测到姿态解算,涵盖精准抓取的全流程。重点讲解了碰撞检测的分层处理、状态机设计、逆向运动学(IK)算法以及抓取稳定性优化等关键技术,并提供了实用的调试技巧和性能优化建议,帮助开发者实现高效的机械臂控制。

weixin_28693447的博客 304

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

超详细 VMware Horizon 虚拟桌面VDI安装步骤

主要的目的是模拟生产环境中的共享存储。自动桌面相当于共享电脑,大家使用同一个虚拟机,对虚拟机的修改都放在用户的配置文件中,RDS桌面池相当于共享的服务器,可以多人同时连接到服务器上。1:之前已经建立好了NFS的存储,这部分配置好后,以后的虚拟机可以安装到NFS的存储中。2: 使用Composer发布系统可以解决SID,机器名冲突的问题,更重要的可以节约磁盘空间,发布的所有系统可以访问一块磁盘。26: 域选择我们之前建立的域,用户名我输入的是管理员,可以在AD域新建用户点击查找,我这里用的是管理员。

vv12345的博客 1万+

HDOJ 1864最大报销额

01背包

m0_58943508的博客 162

Discrete Optimization (Coursera) 学习笔记 Week 1 introduction (开个帖子)

Week 1 Introduction 这位教授Pascal Van Hentenryck 真的算是优化领域神级别的人物了吧?截一张Google scholar的图大家感受一下… 居然在Coursera上看到了他开的课:Discrete Optimization。试听了几节后,发现讲得很有激情,而且深入浅出。遂决定花暑假跟完这一门课。 这门课每周花两三个小时介绍基础概念,然后得花十几个小时写作业(coding)… 一开始以为Coursera上的课的作业应该不会太难,然后第一次作业(knapsack)我就被

ZJ_11701的博客 656

手把手教你用Microsoft AEC Challenge数据集训练自己的回声消除模型(附完整代码)

本文详细介绍了如何使用Microsoft AEC Challenge数据集训练专业的回声消除模型,包括环境准备、数据清洗、模型架构设计、训练流程和实际部署注意事项。通过完整的代码示例和实战指南,帮助开发者快速掌握AEC技术,提升语音通信系统的回声消除效果。

weixin_27697385的博客 457

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

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

ACM!荣耀之路! 5074

计算光刻效率革命:为什么Hopkins模型比Abbe模型快?深入解析TCC的魔力

本文深入解析了计算光刻中Hopkins模型相比Abbe模型的效率优势,重点探讨了TCC(透射交叉系数)的工程智慧。通过预计算光学系统特性并复用TCC矩阵,Hopkins模型实现了数量级的加速,特别适用于复杂照明条件下的光刻仿真。文章详细介绍了TCC的物理意义、模态分解技术以及GPU并行计算等关键加速策略,为半导体制造中的光刻工艺优化提供了实用见解。

weixin_33364627的博客 389

题目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

matlab计算图像信噪比SNR

【代码】matlab计算图像信噪比SNR。

baidu_34971492的博客 1395

手把手教你学 GPU KMD”相关内容的专栏简介与目录

本专栏系统讲解GPU内核模式驱动(KMD)开发技术,涵盖四大核心模块:1)GPU驱动架构基础,解析UMD/KMD协同机制;2)KMD核心功能,包括内存管理、命令提交、中断处理等;3)底层硬件交互,详解PCIe/DMA传输、多级页表等;4)实战进阶,结合Linux DRM框架代码分析,探讨GPU虚拟化与性能优化。面向具备OS和C语言基础的开发者,提供从理论到实践的完整学习路径,帮助深入理解图形/计算驱动栈的底层实现原理。

amy_mhd的博客 154

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

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

weixin_30875157的博客 522

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

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

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

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

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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

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

自伤无色的博客 544

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 1864 最大报销额

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1864 题意:给了n张发票,每张发票只报销A,B,C三类物品,每件物品的报销额不超过600,每张发票的报销额不超过1000,在只能报销q元的条件下,问最多能报销多少钱,输出两位小数。 分析:背包问题。最大容量就是只能报销的钱数q,背包里每一个物品占的体积就是它的价格,获得的价值也是对应的价格。但是q...

zhlbjtu2016的博客 198
上一篇: 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、付费专栏及课程。

余额充值