HDU 1171 Big Event in HDU

HDU1171 Big Event in HDU Big Event in HDU Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 38119    Accepted Submission(s): 13196 Problem Description Nowada 阅读详情

传送门

多重背包,有一点变形。
意思就是给你n种物品,每种物品都有一个数量和价值,让你把这些物品按照价值分为两份,这两份的价值差值尽可能小,问你这两份的价值分别是多少。

虽然这题只给了一个维度,但是照样能转化为背包来做,很简单,将重量和价值看成一个东西,都引用这一个数组就完事了。
这样,dp[j]表示的就是“在拿取物品价值总和不超过j的情况下,最多能拿多少价值的物品”,这样看似像一句废话,但请注意,j不一定能被正好达到。

题目问的是将总价值尽可能平均分为两份,那其实dp[V/2]表示的就是可能较少的那份的价值(V是奇数也没关系,物品价值都是整数,不可能补得上那0.5)。

所以,只需要将背包的第二层循环运行一半就可以了(上限为V/2)。


#include <cstdio>
#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>
#include <string>
#include <queue>
using namespace std;                // 分半,可以转化为多重背包问题,dp[V/2]表示不超过V/2的最大值

int N;
int p[50];
int num[50];
int dp[125001];                     // 50*50*100/2
int V;
vector<int> t;

void init()
{
	memset(dp, 0, sizeof dp);
	V = 0;
}

int main()
{
	for (; ~scanf("%d", &N);)
	{
		if (N < 0) break;
		init();
		for (int i = 0; i < N; i++)
		{
			scanf("%d%d", &p[i], &num[i]);
			V += p[i] * num[i];
		}

		for (int i = 0; i < N; i++)                             // 我们知道dp[V/2]的值就可以得出答案了,所以只求解一半
		{
			if (p[i] * num[i] >= V / 2)
				for (int j = p[i]; j <= V / 2; j++)             // 完全背包正序
					dp[j] = max(dp[j], dp[j - p[i]] + p[i]);
			else
			{
				t.clear();
				for (int k = 1; k < num[i]; k <<= 1)
				{
					t.push_back(k);
					num[i] -= k;
				}
				t.push_back(num[i]);

				for (int k = 0; k < t.size(); k++)
					for (int j = V / 2; j >= p[i] * t[k]; j--)  // 01背包逆序
						dp[j] = max(dp[j], dp[j - p[i] * t[k]] + p[i] * t[k]);
			}
		}
		printf("%d %d\n", V - dp[V / 2], dp[V / 2]);
	}

	return 0;
}
『杭电1171』Big Event in HDU Problem Description Nowadays, we all know that Computer College is the biggest department in HDU. But, maybe you don't know that Computer College had ever been split into Computer College and Software College in 2002. The splitting is absolutely a big ev 阅读详情

相关推荐

C语言入门—初识C语言

一、C语言概述 1、什么是C语言 语言是用来交流沟通的,有一方说,有一方听。必须要两方参与。(自言自语的除外) 语言是人与人交流,而C语言是人与机器交流 语言有独特的语法规则和定义,双方必须遵循这些规则和定义才能实现真正的交流。 接下来首先了解下计算机的组成: 2、计算机介绍 2.1、计算机结构组成 2.2、计算机系统组成 2.3、程序的指令 指令是对计算机进行程序控制的最小单元 计算机的指令系统是指所有指令的集合 程序是指为完成某一项特定任务而用某种言语编写的一组指令序列 3、C语言发展历程 3.

jun319817的博客 1034

HDUOJ 1171 Big Event in HDU

HDUOJ 1171 Big Event in HDU 题目链接 Problem Description Nowadays, we all know that Computer College is the biggest department in HDU. But, maybe you don’t know that Computer College had ever been split into Computer College and Software College in 2002. The s

旺崽的博客 2623

别再手动敲代码了!用STM32CubeMX+FreeRTOS图形化配置,5分钟搞定多任务通信框架

本文详细介绍了如何利用STM32CubeMX和FreeRTOS快速搭建多任务通信框架,大幅提升嵌入式开发效率。通过图形化配置工具,开发者可在5分钟内完成任务调度、时钟配置和内核对象生成,特别适合物联网设备开发。文章还提供了代码优化和调试技巧,帮助开发者轻松应对复杂应用场景。

weixin_30363285的博客 291

Hdu 1171 Big Event in HDU

Hdu 1171 Big Event in HDU(背包) 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1171 Problem Description: Nowadays, we all know that Computer College is the biggest department in HDU. But, maybe you don’...

weixin_43823753的博客 197

FPGA高速接口Aurora8B/10B协议实战:从IP核配置到数据流优化

本文详细介绍了FPGA高速接口Aurora8B/10B协议的实战应用,从IP核配置到数据流优化的全流程。通过Aurora8B/10B协议,开发者可以在FPGA间实现高效的数据传输,适用于高速接口设计。文章涵盖了协议基础、IP核配置、AXI4-Stream接口实战技巧以及性能优化策略,帮助读者快速掌握这一关键技术。

weixin_29280657的博客 268

RPA实战:手把手教你打造抖音自动养号机器人(含避坑指南)

本文详细介绍了如何利用RPA技术从零构建一个智能化的抖音自动养号机器人。内容涵盖环境准备、核心工具选型、拟人化行为流程设计、代码实现模块拆解,并提供了关键的避坑指南与风控对抗策略,帮助开发者高效、稳定地实现账号自动化运营。

orange的博客 559

HDU 1171 Big Event in HDU 多重背包01求解

原题: http://acm.hdu.edu.cn/showproblem.php?pid=1171题目大意: 给定物品的价值和数目,尽量平均分给两个人。其实就是让其中一个人挑选物品,让物品的价值尽量接近总价值的一半。其实就是一个多重背包问题,对于这种简单的数据量小的问题,如果我们把相同的物品看作不同物品,就可以把题目理解成所有物品只能选一次,我们可以用01背包的方式求解。 代码如下:#incl

ShineRoyal 448

DSPF28335:从零到一,实战GPIO与外部中断的嵌入式系统交互设计

本文以德州仪器DSPF28335芯片为例,详细讲解了嵌入式系统中GPIO与外部中断(EXTI)的实战配置方法。通过一个完整的按键控制LED并触发ADC采样的项目,深入剖析了GPIO寄存器配置、三级中断机制(外设-PIE-CPU)以及中断服务函数编写的核心要点,帮助开发者掌握嵌入式交互设计的基石,并提供了关键的避坑指南与调试清单。

weixin_29169899的博客 115

Big Event in HDU HDU - 1171

Nowadays, we all know that Computer College is the biggest department in HDU. But, maybe you don’t know that Computer College had ever been split into Computer College and Software College in 2002. Th...

Foolishman的博客 205

UG NX二次开发(C++)-NX2406系列二次开发编程模板配置

前面已经写了有关UG NX二次开发编程模板配置的文章,但是由于NX2406/2412系列的版本中,在UGOpen文件夹中没有了vs_files文件夹了,而是采用了VSIX Project的方式配置(其适用于VS2019),在VS2022中不能正确的配置。我结合以前配置模板的经验和现在的配置方式讲一下NX2406系列二次开发编程模板的配置。我把相应的编程模板放在资源文件UG NX二次开发编程模板(基于NX2406版本制作)中,方便大家下载使用。

GimiGimmy 2640

【部署】OpenClaw版本降级实操(含全量卸载)

本文详细介绍了OpenClaw工具的降级与卸载方法。主要内容包括:1)通过npm安装指定版本的核心命令及国内镜像加速方案;2)两种卸载路径:CLI工具存在时的简易一键卸载(含交互式与非交互式命令)和手动分步卸载流程;3)CLI已删除但服务仍在运行时,针对macOS(launchd)、Linux(systemd)和Windows(计划任务)系统的具体清理步骤。文章特别强调了卸载前备份的重要性,并提供了不同安装方式(常规安装与源码克隆)的额外说明,确保用户能彻底清理所有组件。

海兰 3171

HDU-1171 Big Event in HDU

传送门:HDU-1171 Big Event in HDU 分析:题目要求将设备分家,并且两家值必须尽可能接近,而且第一家必须大于第二家。 经典01背包问题,算是我对背包问题的入门。 思路:将同种价值而数量多的物品拆分出来,把所有物品看做一个背包,总价值的一半为容量,而每个的价值为重量。 AC代码: #include&lt;iostream&gt; #include&lt;algorithm&gt...

Stark_industry 157

基于逆向工程的中国裁判文书网爬虫技术深度解析

本文详细介绍了中国裁判文书网爬虫的开发过程,涵盖了从基础爬取到高级功能的完整解决方案。逆向工程分析:理解网站的反爬机制和加密逻辑浏览器自动化:使用Playwright模拟真实用户行为参数加密:通过JavaScript执行环境生成加密参数智能调度:控制请求频率,避免被检测错误处理:完善的异常处理和重试机制。

2201_76125261的博客 2145

HDU 1171 Big Event in HDU(01背包)

题目地址:HDU 1171 还是水题。。普通的01背包。注意数组要开大点啊。。。。 代码如下: #include #include #include #include #include #include #include #include #include #include #include using namespace std; int dp[260000], v

scf0920 1109

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

HDU1171 Big Event in HDU 【母函数】

Big Event in HDU Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 22835    Accepted Submission(s): 8018 Problem Description Nowaday

长风的专栏 1028

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

HDU 1171Big Event in HDU

还是 背包 题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1171 题目大意:尽量将价值均分,但是不能将物品的价值拆分,不能均分的情况下,第一个输出的大于第二个输出的值。不是一般的01背包,,, 注意记得计算全部物品的总价值。。 在这里插入代码片#include<iostream> #include<cstdio> #inc...

qq_fairy橙 的博客 144

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

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

HDU1153——Magic Bitstrings,HDU1171——Big Event in HDU,HDU1261——字串数

计算总价值的一半,这是分割设施的目标值。目的是将设施分配给两个学院,使得每个学院的价值尽量接近总价值的一半。这样做的目的是在分配设施时,从价值较大的设施开始考虑,以便更快地接近分割目标。是正整数,就表示有一个新的测试用例需要处理。开始输出每个元素,从而得到最终的序列。转换为长整型后输出,代表两个学院最终的价值。,循环就会继续执行,这样可以处理多个输入值。时,无法按照后续的逻辑生成满足条件的序列。时,可能会导致输出错误的结果,所以从索引。输出的序列中,对应平方数模。,则退出循环,结束程序。

u014114223的博客 853

HDU1171 Big Event In HDU

Nowadays, we all know that Computer College is the biggest department in HDU. But, maybe you don't know that Computer College had ever been split into Computer College and Software College in 200...

baocanggui2657的博客 157

hdu 1171 Big Event in HDU

hdu   1171   Big Event in HDU               题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1171 题目大意:分家,重型设备什么的没法一劈两半,所以要按价值来尽量分成相近的两堆(相等当然最好)。 题目分析:多重背包,价值即重量。 code: #include #include int max(int

slicer的技术交流栈 743

hdu 1171 Big Event in HDU

Big Event in HDUTime Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 19406 Accepted Submission(s): 6787Problem DescriptionNowadays, we all k...

anque1234的博客 79

HDU1171:Big Event in HDU

http://acm.hdu.edu.cn/showproblem.php?pid=1171登录后复制 Problem Description Nowadays, we all know that Computer College is the biggest department in HDU. But, maybe...

weixin_36905860的博客 187

HDU 1171 Big Event in HDU (母函数)

题意:有n样物品,每样物品价值是v,件数是m。尽量把这些物品分成两堆使得两边总价值最接近。输出分得的两堆各自的价值。 利用母函数法来解决,因为分成两堆,而两堆中较小的一堆最大为所有物品总价值量的一半,所以母函数的组合数上下就可以设置成总价值量的一半。求出所有的组合后,可以利用贪心的思想来得到答案,因为要求两堆之差尽可能小,所以就可以从总价值量的一半开始向小的方向找,找到最大的价值量,则另一堆的价值量就是总价值量-此堆的价值量。因为组合数可能较大,这里不记录组合种数,而是用一个标记来表示该数能否组合出即可。

凌风 3969
上一篇: HDU 1494 跑跑卡丁车
下一篇: HDU 2844 Coins
Crossing over
博客等级 码龄10年 6粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值