POJ 1014 / HDU 1059 Dividing (多重背包&剪枝&单调队列)

回溯法加剪枝解决01背包问题(C++) 01 背包问题: knapsack 是解决如何将一个背包的价值最大划的问题  输入:  c 背包最大容量,w[] 物品的重量 ,v[] 物品的价值  输出:bestv 最大的可放置在背包内的物品价值总和,bestX[] 对应bestp的物品取法,即最优值和最优解 例如:输入:c = 30, w[] = {20,15,15} v[] = {40,25,25},             则 阅读详情

http://poj.org/problem?id=1014


参考了http://poj.org/showmessage?message_id=173435


完整代码:
 

/*0ms,376KB*/

#include<cstdio>
#include<cstring>
const int mx = 7;
const int mxw = 1300;

int m[mx], dp[mxw], deq[mxw], deqv[mxw];

int solve(int maxw, int n)
{
	memset(dp, 0, sizeof(dp));
	int i, a, j, s, t, val;
	for (i = 1; i <= n; ++i)
		for (a = 0; a < i; ++a)///枚举a=j%i
		{
			s = t = 0; ///deque的头和尾
			for (j = 0; j * i + a <= maxw; ++j)
			{
				val = dp[j * i + a] - j * i;///划归为可重复使用的值
				while (t > s && deqv[t - 1] <= val) --t;///保证deque的队首是最大的
				deq[t] = j;
				deqv[t++] = val;
				dp[j * i + a] = deqv[s] + j * i;///从双端队列的头部取出最大值
				if (deq[s] == j - m[i]) ++s;///这一头部已无法使用
			}
		}
	return dp[maxw];
}

int main()
{
	int i, sum, cas = 0;
	while (scanf("%d%d%d%d%d%d", &m[1], &m[2], &m[3], &m[4], &m[5], &m[6]), m[1] || m[2] || m[3] || m[4] || m[5] || m[6])
	{
		printf("Collection #%d:\n", ++cas);
		sum = 0;
		for (i = 1; i <= 6; ++i)
		{
			if (m[i] > 60) m[i] = 60 + (m[i] & 1);
			sum += i * m[i];
		}
		if (sum & 1) puts("Can't be divided.");
		else
		{
			sum >>= 1;
			puts(solve(sum, 6) == sum ? "Can be divided." : "Can't be divided.");
		}
		putchar(10);
	}
	return 0;
}

一种高超声速飞行器弹道的仿真方法 设计并实现了一个高超声速飞行器弹道仿真算法,并应用到基于OSGEarth的态势中。 阅读详情

相关推荐

RK3568(buildroot)利用squashfs+overlay实现嵌入式系统高可靠存储方案

本文详细介绍了在RK3568嵌入式平台上,基于Buildroot系统,利用squashfs只读根文件系统与overlayfs可写层相结合的高可靠存储方案。该方案能有效防止设备意外断电导致的系统文件损坏,通过内核配置、启动脚本编写及镜像制作,实现系统核心的只读保护与用户数据的持久化分离,显著提升嵌入式设备的现场稳定性。

weixin_29189381的博客 546

poj 1014 Dividing 二进制拆分,单调队列

题目大意:给你6种大理石,每种大理石i的个数为num[i],价值为i,问你有没有策略能时它分成两份,两份总价值相等。 解题思路:0/1多重背包问题。 dp[i][j] = max{dp[i - 1][j - k * i] + k * i}  这里的i为第i种大理石的价值, 0 多重背包,根据拆分思想,把每种大理石num[i]拆分成2进制表示。然后转换成为0/1背包问题。 #includ

涛涛不解 2213

文件上传漏洞攻击与防范方法

文件上传漏洞攻击与防范方法 文件上传漏洞简介: 文件上传漏洞是web安全中经常用到的一种漏洞形式。是对数据与代码分离原则的一种攻击。上传漏洞顾名思义,就是攻击者上传了一个可执行文件如木马,病毒,恶意脚本,WebShell等到服务器执行,并最终获得网站控制权限的高危漏洞。 文件上传漏洞危害: 上传漏洞与SQL注入或 XSS相比 , 其风险更大 , 如果 Web应用程序存在上传漏洞 , 攻击者上传...

m0_38103658的博客 4万+

【POJ - 2373】Dividing the Path(单调队列优化dp)

题干: Farmer John's cows have discovered that the clover growing along the ridge of the hill in his field is particularly good. To keep the clover watered, Farmer John is installing water sprinklers al...

xuanweiace的博客 527

从动态规划到最优控制:Hamilton-Jacobi-Bellman (HJB) 方程的核心思想与应用

本文深入解析了Hamilton-Jacobi-Bellman (HJB) 方程的核心思想与应用,从动态规划到最优控制的演变过程。通过实际案例展示了HJB方程在机器人路径规划、工业机械臂优化等领域的实践价值,并探讨了数值求解方法和深度学习结合的神经HJB前沿进展。

weixin_28700411的博客 453

手把手教学:用国产GLM-4.6替代Claude4.0,实现AI自动化编程全流程

本文提供了一份详细的教程,指导开发者使用国产GLM-4.6模型替代Claude 4.0,实现AI自动化编程。内容涵盖从获取API密钥、搭建本地环境、改造Claude Code工具到实战开发与VSCode集成的全流程,旨在帮助用户低成本、高效率地体验AI自主编程。

weixin_29070861的博客 553

HDU-1059 Dividing (多重背包 二进制优化+剪枝)

多重背包,加上二进制和剪枝优化。1.2.3.4.5.6的硬币各不超过20000个,问是否可以分为相等的两份。

hmc0411的博客 684

RTX 4060笔记本也能跑!保姆级教程:用Ollama在Windows上部署DeepSeek-R1-8B模型

本文详细介绍了如何在RTX 4060笔记本上通过Ollama本地部署DeepSeek-R1-8B模型,提供从环境配置到性能调优的全流程优化指南。针对笔记本用户的显存、散热等问题,给出了量化模型选择、启动参数优化及散热解决方案,帮助用户在消费级硬件上高效运行大语言模型。

weixin_28745067的博客 524

【POJ 2373】Dividing the Path【DP】【单调队列】

题目大意: 题目链接:http://poj.org/problem?id=2373 从0开始,每次可以跳a×2a×2a\times2到b×2b×2b\times2之间任意一个整数格,但是不能跳到一些特殊格子。求跳到mmm的最少跳跃次数。 思路: 设f[i]f[i]f[i]为0号格子到iii号格子的最短跳跃次数,那么就有f[i]=min{f[j]}+1(a×2≤j≤b×2)f[i]=mi...

stoorz 319

全国大学生软件测试大赛Web应用测试(二)Selenium功能测试环境配置

全国大学生软件测试大赛Web应用测试(二)Selenium功能测试环境配置指南配置JAVA配置mooctest配置ChromeDriver配置SeleniumSelenium的使用 环境配置指南 配置JAVA 首先进入JDK8官方安装地址 然后找到Windows 64位 jdk8 点击下载(这里下载需要登录Orcale 账户) 下载后JDK的安装根据提示进行,还有安装JDK的时候也会安装JRE,一并安装就可以了。 安装JDK,安装过程中可以自定义安装目录等信息,例如我们选择安装目录为 D:\java\jav

Kennen0_0的博客 9606

【即插即用模块】Transformer篇 | CVPR 2025 | D2T:双域特征融合,完美适配缺陷检测/小目标检测和分割等频域细节敏感的任务!

本文提出了一种基于小波和原型增强的双域Transformer(WPFormer)用于像素级表面缺陷检测。该模型通过Dual-domain Transformer (D2T)模块融合频域和空间域特征:小波增强交叉注意力(WCA)分解高低频特征并加权平衡,增强缺陷细节捕捉;原型引导注意力(PCA)生成全局原型向量强化关键信息聚合。实验表明,该模块在缺陷检测任务中性能优于现有方法,通过频域细节增强和全局依赖建模有效提升了复杂场景下的检测效果。代码已开源,适用于对频域敏感的目标检测和分割任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1374

第十二天:poj1014(又见dfs,这次有图有真相)

这次终于是来了,就是那种见到题目就想用dfs去解的那种感觉来了。题目意思很明确,就是分价值1-6的东西,两个人分到的应该相同。首先想到的是,计算总的价值,然后如果是奇数的话,那就肯定不能分了,如果是偶数的话,只要满足价值能到总价值的一半的话,那么就可以了。 注意每次输出之后有一个空行,我也是PE了之后才注意到的,很容易忘记的。。。然后是算法:首先1-6搜索,然后搜到一个之后继续向下,1-6搜索,每

Sherlock_____Holmes 522

代谢组数据分析(三):代谢组降维分析

本文详细介绍了代谢组学中常用的降维分析方法,包括PCA、PLS-DA和OPLS-DA。PCA通过线性变换降低数据维度,便于数据可视化和异常值检测;PLS-DA是一种有监督的模式识别方法,适用于分类和预测;OPLS-DA通过正交分解避免过拟合,更准确地筛选差异代谢物。降维分析在揭示样本间差异和发现生物标志物方面具有重要意义

专注生信领域 3790

poj1014 Dividing 多重背包DP+神剪枝

这题discuss里的做法我无疑是服气的= = 考虑值为6的石头: 将值为6的石头分为两部分,一部分均分为两堆,另一部分用于填补缺口。 所谓填缺口就是当其他的石头分完之后再把这部分石头分入两堆(也有可能只放入一堆)。 现在考虑需要多少6值石头用于填缺口。 假设左边的总值小于右边的总值 1.要能均分,剩下的缺口一定是6的倍数; 2.在分配其他的石头时,可以做到尽可能的是缺口小 (比如,如果可以

BPM136 508

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

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an &ldquo;advanced algorithms&rdquo; 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...

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

hdu 2191(单调队列优化多重背包模板)

题目链接 裸的多重背包,数据也很水,只是打个模板用的 一般的多重背包时间复杂度O(V∑N)O(V∑N)O(V \sum N),二进制优化后O(V∑logN)O(V∑logN)O(V \sum logN),但有的题必须O(N⋅V)O(N⋅V)O(N \cdot V)才能过,这就必须用单调队列优化了 设物品iii体积v[i]v[i]v[i],价值w[i]w[i]w[i],个数n[i]n[i]n[...

hhz6830975的博客 711

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

HDU1059 单调队列优化 多重背包O(VN)

<br /><br />Dividing<br />Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)<br /> Total Submission(s): 3850    Accepted Submission(s): 1035<br /><br /><br />Problem Description<br />Marsha and Bill own a collection of ma

ACM_DavidCN的专栏 3601

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

证明 poj 1014 取模优化剪枝,部分递归 存在错误

做了这道题目,我才发现一道题即便可行,但是正确性也不一定。多数由于题目数据太弱。 poj 1014 Dividing 题目大意:有6堆石头,权重分别为1 2 3 4 5 6,要求输入 每堆个数 ,求是否可以平分石头使得两堆价值相同。 网上对这道题的做法就两种,其中有错误的版本,却也可以AC。起初这让我等菜鸟感慨代码的简洁,但无法得出正确性的证明 接下来就对两种方法的错误性进行证明。

gg_gogoing的专栏 1664

POJ1014几种解法小结

  第一种解法:dp(感觉不像)>思想:本题是找按价值均分大理石的方案是否存在,由于分配时不能破坏大理石,所以有个显而易见的剪枝:当所有的大理石的总价值为奇数时肯定不能被均分。把问题转化一下即:由一个人能否从原大理石堆中取出总价值为原来一半的大理石,本题的主要算法是动态规划,数组flag代表状态,设总价值为sum.当flag[k]==true时,说明,可以有一人获得价值k,

zhengzhenzhe的专栏 727

递归-简单背包问题(修剪递归树,含全部代码)

题目:假设你是一个小偷,有一个可放总重量为m(m&amp;lt;1000)的背包。现有n(n&amp;lt;32)件物品,总量分别为W1,W2,...Wn。       其中,m、n、Wi(1=&amp;lt;i&amp;lt;=n)均为正整数,现要求你尝试挑选几件物品,使这些物品重量之和为m。       若可以,输出那true。否则,输出false。 输入格式: 第一行为两个正整数m和n 第二行为n个正整数,分别表示n件物品...

关注网络安全、云原生安全 3523

动态规划解最长公共子序列(LCS)问题 (附可打印LCS完整代码)

动态规划法 经常会遇到复杂问题不能简单地分解成几个子问题,而会分解出一系列的子问题。简单地采用把大问题分解成子问题,并综合子问题的解导出大问题的解的方法,问题求解耗时会按问题规模呈幂级数增加。 为了节约重复求相同子问题的时间,引入一个数组,不管它们是否对最终解有用,把所有子问题的解存于该数组中,这就是动态规划法所采用的基本方法。 【问题】 求两字符序列的最长公共字

AC,∑ndless 9136

最长递增子序列(LIS)的O(NlogN)打印算法

题目: 求一个一维数组arr[n]中的最长递增子序列的长度,如在序列1,5,8,3,6,7中,最长递增子序列长度为4 (即1,3,6,7)。 方法一:一般的DP方法(O(N^2)) 像LCS一样,从后向前分析,很容易想到,第i个元素之前的最长递增子序列的长度要么是1(单独成一个序列),要么就是第i-1个元素之前的最长递增子序列加1,这样得到状态方程:

AC,∑ndless 7453

动态规划(DP)——入门篇(11.24更新)

零、先修课程 首先,在开始理解DP的思想前,你需要 1. 完成HDU里面的递推求解专题练习(For Beginner)那7道题(这些题很简单,题解请在博客中搜索),这对你理解DP有很大的帮助。 2. 对递归搜索(比如深度优先搜索,DFS)有一定了解。 一、递归与记忆化搜索 我们从POJ 3176入手来学习这一思想。(题目很短,请快速读完) 从上往下看,最大和值无非是往左走和往右

AC,∑ndless 2860

Codeforces Round #119 (Div. 2) / 189A Cut Ribbon (完全背包)

A. Cut Ribbon http://codeforces.com/problemset/problem/189/A time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output

AC,∑ndless 2675

UVa 10313 Pay the Price (DP&整数拆分)

思路: 这个题目涉及到一个结论,用不超过j个硬币凑出面值i的方案种数,是和用面值不超过j的硬币凑出面值i的方案种数是相同的。说得再数学一点,就是整数i拆分成不超过j个整数的拆分数,是和整数i拆成若干个值不超过j的整数的拆分数是相同的。具体的证明用到了Ferrers图像的性质。 这样的话我们就可以取一个二维数组f[i][j]表示用面值不超过j的硬币凑出面值i的方案的种数,那么如果我使用了面值j,对应方案种数就应该加上f[i-j][j],如果我们不使用面值j,那么对应的方案种数就应该加上f[i

AC,∑ndless 2356

Codeforces Round #235 (Div. 2) / 410D Roman and Numbers (带有整除性质的数位DP)

http://codeforces.com/problemset/problem/401/D 解释全部在代码的注释中: /*78ms,205464KB*/ #include using namespace std; const int mx = 1 << 18; long long dp[mx][100]; ///dp[mask][j]表示余数为j时的mask对应的x的个数 ///

AC,∑ndless 2198

UVa 357 Let Me Count The Ways (完全背包)

357 - Let Me Count The Ways Time limit: 3.000 seconds  http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=114&page=show_problem&problem=293 思路:dp[i] += dp[i - coin[

AC,∑ndless 2189
上一篇: HDU 2686 Matrix (双线程DP)
下一篇: POJ 3211 Washing Clothes (平衡划分&01背包)
synapse7
博客等级 码龄14年 432粉丝 701原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值