【动态规划进阶-背包型】subset问…

动态规划 (Dynamic Programming) 之 背包问题合辑 (Knapsack, Subset Sum, Partition and change making problem ) 背包问题一直是动态规划中的经典问题。这个问题又分成01背包,完全背包,多重背包,分组背包等等。。我在这里只记录下01背包(0-1knapsack)和完全背包(unbounded knapsack)。背包问题的简单描述就是有一个背包和一堆物品。每个物品有自己的大小和价值。我们希望在一个特定容量的背包中放入价值尽可能大的物品。01背包呢就是每个物品最多只能放一次,也就是要么放要么不放,所以被称为01背 阅读详情

【动态规划进阶-背包型】subset问题

Time Limit:1000MS  Memory Limit:655360K
Total Submit:33 Accepted:12

Description

对于从1到N (1 <= N <= 39) 的连续整数集合,能划分成两个子集合,且保证每个集合的数字和是相等的。举个例子,如果N=3,对于{1,2,3}能划分成两个子集合,每个子集合的所有数字和是相等的:
{3} 和 {1,2}
这是唯一一种分法(交换集合位置被认为是同一种划分方案,因此不会增加划分方案总数)如果N=7,有四种方法能划分集合{1,2,3,4,5,6,7},每一种分法的子集合各数字和是相等的:
{1,6,7} 和 {2,3,4,5} {注 1+6+7=2+3+4+5}
{2,5,7} 和 {1,3,4,6}
{3,4,7} 和 {1,2,5,6}
{1,2,4,7} 和 {3,5,6}
给出N,你的程序应该输出划分方案总数,如果不存在这样的划分方案,则输出0。程序不能预存结果直接输出(不能打表)。

Input

输入文件只有一行,且只有一个整数N

Output

输出划分方案总数,如果不存在则输出0。

Sample Input

7

Sample Output

4

Source

USCAO

 

由题目提醒,用背包来做。

之前看过这道题,根本没想到要用动态规划。

其实就是个01背包。

 

var
 n,s,i,j:longint;
 a:array[0..1000+1]of int64;
begin
 read(n);
 s:=0;
 for i:=1 to n do s:=s+i;
 if s mod 2<>0 then
  begin
   writeln(0);
   exit;
  end
  else s:=s div 2;
 a[0]:=1;
 for i:=1 to n do
  for j:=s downto i do
   a[j]:=a[j]+a[j-i];
 write(a[s] div 2);
end.

背包问题详解:从动态规划到实际应用 背包问题是计算机科学中经典的组合优化问题,属于NP完全问题范畴,广泛应用于资源分配、投资组合等场景。其核心思想是通过动态规划将复杂问题分解为子问题求解,典型应用包括0-1背包、完全背包和多重背包等变体。动态规划通过状态转移方程实现高效计算,空间优化技巧如滚动数组能将复杂度从O(NW)降至O(W)。背包问题不仅是算法设计的试金石,更是理解贪心算法与精确解法边界的典型案例。在实际工程中,背包问题变体如LeetCode 416分割等和子集、货币兑换等问题都需要根据具体场景调整状态转移方程和遍历顺序。掌握背包问题对 阅读详情

相关推荐

背包问题

0-1 背包问题 有一个背包,它的容量为C(Capacity),现在有 n 种不同的物品,编号为 0…n-1,其中每一件物品的重量为 w(i),价值为 (i)。问可以向这个背包中盛放哪些物品,使得在不超过背包容量的基础上,物品的总价值最大。 暴力解法:每一件物品都可以放进背包,也可以不放进背包。 时间复杂度:O((2^n)*n) 因此,贪心算法无法解决该问题。 参数的个数表示问题的限制条件的个...

一只特立独行的猪 821

01背包问题(leetcode 416. Partition Equal Subset Sum & leetcode 474 ones and zeroes)

01背包

朝着梦想前行。 1143

动态规划之背包问题系列总结

背包问题是一类经典的动态规划问题,它非常灵活,需要仔细琢磨体会,本文先对背包问题的几种常见类型作一个总结,再给出代码模板,然后再看看LeetCode上几个相关题目。 根据维基百科,背包问题(Knapsack problem)是一种组合优化的NP完全(NP-Complete,NPC)问题。问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。NPC问题是没有多项式时间复杂度的解法的,但是利用动态规划,我们可以以伪多项式时间复杂度求解背包问题

金州饿霸吃不饱的博客 921

【leetcode 动态规划(01背包问题) C++】416. Partition Equal Subset Sum

416. Partition Equal Subset Sum class Solution { public: bool canPartition(vector<int>& nums) { int sum = 0; for(auto num : nums) sum += num; if(sum % 2) return false; sum /= 2; vector<bool> dp(s

izhxxx的博客 197

【高等数值分析】Krylov子空间方法

文章目录1. 预备理论1.1 Krylov 子空间1.2 最佳逼近1.2.1 方法一:最佳平方逼近1.2.2 方法二:假设 AAA 对称正定1.2.3 方法三:残差2范数2. 基底正交化2.1 Arnoldi 过程(CGS)2.2 改进 Arnoldi 过程(MGS)2.3 Lanczos过程3. 方程组求解3.1 全正交方法 (FOM)3.2 D-Lanczos方法3.3 广义极小残量法(GMRES)3.4 MINRES 方法 1. 预备理论 现在需要求解一个大规模稀疏方程组 Ax=bAx=bAx=b,可

Glooow的博客 1万+

Xilinx UltraScale+系列FPGA实现USB3.0 DEV 设备 部分原理图+代码分享

Zynq UltraScale+ MPSoC 系列是 Xilinx 新一代 Zynq 平台。在 FPGA 里有完整的 ARM 处理(PS),包含了四核或双核 Cortex-A53 处理器 ,处理器子系统中有DDR内存控制器等大量的外设,在FPGA中完全独立于可编程逻辑单元(PL)如果暂时没有用到PL部分,PS也能单独工作,相当于可以当成一个ARM来用了(以前的不行)。 ARM也包含USB3.0控制器,这是实现USB3.0DEV的关键,根据官方手册(ug1085)描述,USB主(Host)从(Device)

Pierre 1万+

动态规划法(四)0-1背包问题(0-1 Knapsack Problem)

  继续讲故事~~   转眼我们的主人公丁丁就要离开自己的家乡,去大城市见世面了。这天晚上,妈妈正在耐心地帮丁丁收拾行李。家里有个最大能承受20kg的袋子,可是妈妈却有很多东西想装袋子里,已知行李的编号、重要、价值如下表所示: 妈妈想要在袋子所能承受的范围内,使得行李的价值最大,并且每件行李只能选择带或者不带。这下妈妈可犯难了,虽然收拾行李不在话下,但是想要解决这个问题,那就不是她的专...

aix26249的博客 248

详细了解sklearn中的CountVectorizer

CountVectorizer 是 scikit-learn(一个流行的 Python 机器学习库)中的一个文本特征提取类,其核心功能是将一系列原始文本(如句子、文档)转换为基于词频(word count)的数值矩阵。它基于词袋模型(Bag of Words, BoW)思想,忽略文本的语法结构和词序,仅关注词汇在文本中出现的频率,从而将文本转化为机器可理解的数字形式。文本 1:"I love machine learning"

2302_76568160的博客 1119

C++ 数据结构与算法(十二)(动态规划基础、背包问题)

动态规划、代码随想录、LeetCode

chenyfan_blog 1789

Windows 24H2下eNSP AR_40启动失败的终极修复指南

本文针对Windows 11 24H2更新后eNSP AR_40路由器启动失败的问题,提供了终极修复方案。核心在于解决系统强制虚拟化安全(VBS/Hyper-V)与老版模拟软件的兼容性冲突。指南详细介绍了安装关键系统更新KB5053656、精细调整Windows虚拟化功能以及后续排错步骤,帮助用户在24H2系统上稳定运行eNSP进行网络实验。

weixin_29233333的博客 507

abaqus 根据坐标施加载荷- Analytical Field 载荷映射

在一些类型的分析中,需要将按位置分布的载荷施加到结构上,比如流体分析导出了结构的气动载荷、或者温度载荷,需要将压强分布、温度分布载荷施加到固体上。这种分析可以使用abaqus中的Analytical Field实现。 1 例子 1.1 结构 一个100*100mm的面,面的载荷分布函数为p=(x2+y2)0.5/((20.5)*100) MPa,即(0, 0)的压强为0,(100, 100)的压强为1。 1.2 载荷 载荷函数:p=(x^2+y^2)^0.5/((2^0.5)*100) in exce.

shengyutou的博客 2万+

动态规划-01背包问题 &&LeetCode416 Partition Equal Subset Sum

背包问题 01背包问题引入 一 问题 有n个物品,它们有各自的体积和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和?换而言之,如何用有限的体积装最多价值的物品? 本题:number=4,capacity=8 i(物品编号) 1 2 3 4 w(体积) 2 3 4 5 v(价值) 3 4 5 6 二 总体思路 根据动态规划解题步骤(问题抽象化、建立模型、寻找约束条件、判断是否满足...

Daci Studio 298

10|Git Diff 与增量代码识别:本次到底改了哪些代码?

本文介绍 Git Diff 和增量代码识别,帮助你理解精准测试如何先找到本次真正变化的代码。测试开发工程师。Java 后端开发工程师。质量平台 / DevOps 平台建设者。想了解精准测试落地方法的技术负责人。

专注 AI 精准测试平台实战落地,分享从代码 Diff 到回归决策的完整工程闭环。主张“先建数据链路,再上 AI 智能”,让测试从“靠经验”走向“基于风险”。 160

LeetCode常见题型——背包问题

背包问题:有N 个物品和容量为W 的背包,每个物品都有自己的体积w 和价值v,求拿哪些物品可以使得背包所装下物品的总价值最大。

贫道绝缘子的博客 3449

利用 SAP Joule 提升 ABAP 开发效率的前提条件与限制全解析

综上,想要在 ABAP Development Tools 中顺利使用 SAP Joule,既要准备好 BTP、IAS、ABAP 系统与 ADT 的版本与信任链,也要理解许可证、配额、语法范围等限制。只有在这些前提全部满足后,Joule 才能真正发挥生成式 AI 的价值,帮助 ABAP 开发者从繁琐模板中解放出来,把注意力投入在业务创新与 Clean Core 改造之上。未来 SAP 还将扩展中文语境、自动修复建议以及跨系统智能代理等功能,值得持续关注。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 664

45、概率与模糊性:粗糙事件与模糊事件概率的探索

本文探讨了概率理论与模糊性理论在处理现实世界不确定性中的应用,重点分析了模糊事件和粗糙事件的概率定义、性质及其条件概率。同时,介绍了近似贝叶斯网络分类器在信息系统中的应用,以及如何通过概率决策约简提高分类效率。这些方法为处理不确定信息提供了灵活的工具,并在决策和数据分析中具有重要价值。

ik67890123的博客 135

牛客 - Subset of Five(背包)

题目链接:点击查看 题目大意:给出 n 个数字,要求选出一些数字,使得这些数字之和可以在整除五的前提下尽量大 题目分析:一开始以为是贪心问题,但贪心发现不太好实现,问了问 zx 学长,给我提示说是背包dp,仔细想了一下确实如此 dp[ i ][ j ] 代表处理完前 i 个数后,%5 的结果为 j 时的最大数字之和,这样答案显然为 dp[ n ][ 0 ] 了,转移状态也比较简单 代码: #include<iostream> #include<cstdio> #inc.

Falcon的博客 432

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

hdu6092 Rikka with Subset(01背包)

题意 给你一个b[]数组,每次取a数组的子集之和为i的方案数有bi个 输出字典序最小的a数组 思路来源 https://www.bilibili.com/video/av29915579/?spm_id_from=333.788.videocard.0 题解 心得 01背包逆序和完全背包正序是方程决定的 dp[j][k]=dp[j-1][k]+dp[j-1][k-a[j...

小衣同学的博客 284

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

HDUOJ 6092 Rikka with Subset[动态维护思想+逆向01背包]

题目连接:HDUOJ 6092 Rikka with Subset (看的懂英语的尽量看英语,毕竟全文翻译没有那么准确) 题目大意:给你一个未知的a[]数组,长度为m+1,再给你一个b[]数组,长度也为m+1,表示以所有各个集合分别的和(包括空集)为下标个数为数值,n为集合的最大值,让求出a[]数组。 样例解释: 第一组样例: a[]:1 2 b[]:1 1 1 1 n:2 m:3 集合 (下标)...

BLNG 168

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

416. Partition Equal Subset Sum dp动态规划

Given anon-emptyarraynumscontainingonly positive integers, find if the array can be partitioned into two subsets such that the sum of elements in both subsets is equal. Example 1: Input: nums = [1,5,11,5] Output: true Explanation: The array can be ...

salmonwilliam的博客 390

Leetcode-416. Partition Equal Subset Sum(01背包拓展)

01背包问题定义:给定n种物品和一背包。物品i的重量是wi,其价值是vi,背包的容量是c.问如何选择装入背包中的物品,使得装入背包中的物品的总价值最大?

caoyan_12727的博客 1000

Java | LeetCode | 416. Partition Equal Subset Sum | 背包问题 | 动态规划

416. Partition Equal Subset Sum | 背包问题 问题描述 Given a non-empty array containing only positive integers, find if the array can be partitioned into two subsets such that the sum of elements in both subse...

肖胖孩de部落格 613

[洛谷]P1466 集合 Subset Sums (#动态规划-背包)

题目描述 对于从1到N (1 <= N <= 39) 的连续整数集合,能划分成两个子集合,且保证每个集合的数字和是相等的。举个例子,如果N=3,对于{1,2,3}能划分成两个子集合,每个子集合的所有数字和是相等的: {3} 和 {1,2} 这是唯一一种分法(交换集合位置被认为是同一种划分方案,因此不会增加划分方案总数) 如果N=7,有四种方法能划分集合{1,2,3,4,5,6,7...

A.pro的博客 441

蓝桥杯备考----》集合 Subset Sums 背包dp

动态规划步骤 1.定义状态表示 f[i][j]表示从1到i个数里选出和为j的数的方案。当然sum是不可以为奇数的,不然就没有结果了。最后选数的方案要除2,因为是有重复的。我们可以选出数满足和等于sum/2。答案 f[n][sum/2]/2。这道题完全可以转换成背包问题。step2:推导状态转移方程。

2301_81772249的博客 297

LintCode 588: Partition Equal Subset Sum (背包问题好题)

Partition Equal Subset Sum Given a non-empty array containing only positive integers, find if the array can be partitioned into two subsets such that the sum of elements in both subsets is equal. Ex...

roufoo的博客 330
上一篇: 【动态规划进阶-背包型】nuggets问…
下一篇: 简单题
m42ping
博客等级 码龄12年 5粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值