当前位置: 首页 > news >正文

P1466 集合 Subset Sums【洛谷算法习题】

P1466 集合 Subset Sums

网页链接

P1466 集合 Subset Sums

题目描述

对于从1 ∼ n 1\sim n1n的连续整数集合,能划分成两个子集合,且保证每个集合的数字和是相等的。举个例子,如果n = 3 n=3n=3,对于{ 1 , 2 , 3 } \{1,2,3\}{1,2,3}能划分成两个子集合,每个子集合的所有数字和是相等的:

{ 3 } \{3\}{3}{ 1 , 2 } \{1,2\}{1,2}是唯一一种分法(交换集合位置被认为是同一种划分方案,因此不会增加划分方案总数)

如果n = 7 n=7n=7,有四种方法能划分集合{ 1 , 2 , 3 , 4 , 5 , 6 , 7 } \{1,2,3,4,5,6,7 \}{1,2,3,4,5,6,7},每一种分法的子集合各数字和是相等的:

{ 1 , 6 , 7 } \{1,6,7\}{1,6,7}{ 2 , 3 , 4 , 5 } \{2,3,4,5\}{2,3,4,5}
{ 2 , 5 , 7 } \{2,5,7\}{2,5,7}{ 1 , 3 , 4 , 6 } \{1,3,4,6\}{1,3,4,6}
{ 3 , 4 , 7 } \{3,4,7\}{3,4,7}{ 1 , 2 , 5 , 6 } \{1,2,5,6\}{1,2,5,6}
{ 1 , 2 , 4 , 7 } \{1,2,4,7\}{1,2,4,7}{ 3 , 5 , 6 } \{3,5,6\}{3,5,6}

给出n nn,你的程序应该输出划分方案总数。

输入格式

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

输出格式

输出划分方案总数。

输入输出样例 #1

输入 #1

7

输出 #1

4

说明/提示

【数据范围】

对于100 % 100\%100%的数据,1 ≤ n ≤ 39 1\le n \le 391n39

翻译来自 NOCOW。

USACO 2.2

解题思路

本题是01背包方案计数的经典应用题,通过将等和划分问题转化为子集和计数问题,使用动态规划高效求解。

问题等价转化

将 1~n 的整数集合划分为两个和相等的子集,可按以下步骤推导:

  1. 计算全集总和s u m = n ( n + 1 ) 2 sum = \frac{n(n+1)}{2}sum=2n(n+1)。若 sum 为奇数,无法平分,答案直接为 0。
  2. 若 sum 为偶数,设每个子集的目标和为t a r g e t = s u m 2 target = \frac{sum}{2}target=2sum。问题转化为:从 1~n 中选出若干个数,和恰好为 target,求这样的子集总数。
  3. 由于交换两个子集视为同一种划分方案,最终答案等于子集总数除以 2。
动态规划求解子集和计数

采用01背包模型统计方案数:

  • 状态定义dp[i][j]表示从前 i 个数中选取若干个,和恰好为 j 的方案总数。
  • 初始边界dp[0][0] = 1,即不选任何数时,和为 0 的方案有 1 种(空集)。
  • 状态转移:对第 i 个数(数值为 i)有两种选择:
    • 不选该数:方案数继承自前 i-1 个数的结果,即dp[i][j] = dp[i-1][j]
    • 选该数:若 j ≥ i,则加上前 i-1 个数和为 j-i 的方案数,即dp[i][j] += dp[i-1][j-i]
结果输出
  • 若总和为奇数,直接输出 0。
  • 否则,总子集方案数为dp[n][target],最终划分方案数为dp[n][target] / 2

算法时间复杂度为O ( n 2 ) O(n^2)O(n2),空间复杂度为O ( n 2 ) O(n^2)O(n2),n 最大为 39,计算量极小,完全满足题目要求。

总结

核心逻辑:将等和划分问题转化为子集和计数问题,通过01背包动态规划统计符合目标和的子集总数,再除以2得到最终划分方案数。
关键操作:总和奇偶性预判、01背包方案计数递推、对称划分去重处理。
效率保障:n最大39,总运算量仅千级,运行开销极低。

代码简要说明

  1. 数组初始化a数组存储 1~n 的数值,dp二维数组用于存储方案数,全局数组默认初始化为 0,手动设置dp[0][0] = 1作为初始边界。
  2. DP递推:外层遍历每个数字,内层遍历所有可能的和,按01背包规则更新方案数。
  3. 奇偶判定:若n*(n+1)不能被 4 整除(即总和为奇数),直接输出 0;否则输出dp[n][target],其中target = n*(n+1)/4
  4. 代码特性说明
    • 内层循环 j 从 1 开始,未显式维护dp[i][0] = 1,因此仅统计了必须包含数字1的子集方案数。
    • 利用本题连续整数的数学性质:目标和为总和一半时,包含1的子集数恰好等于不包含1的子集数,因此统计结果刚好等于总方案数的一半,即最终答案。
    • 标准通用写法应从 j=0 开始循环以维护空集方案,最后将总方案数除以2,逻辑更严谨且适用于任意数值集合。
  5. 输入优化:关闭流同步并解绑 tie,提升输入输出效率。

代码内容

#include<bits/stdc++.h>usingnamespacestd;#defineendl'\n'typedeflonglongll;typedefunsignedlonglongull;typedefvector<vector<ll>>vvt;typedefpair<ll,ll>pll;constll N=1e3+10;constll INF=1e18;constll M=1e6+10;constll mod=1e9+7;intmain(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);ll n;cin>>n;ll a[45];for(ll i=1;i<=n;i++)a[i]=i;ll dp[45][2010]={};dp[0][0]=1;for(ll i=1;i<=n;i++)for(ll j=1;j<=n*(n+1)/2;j++){dp[i][j]=dp[i-1][j];if(j>=a[i])dp[i][j]+=dp[i-1][j-a[i]];}if(n*(n+1)%4==0)cout<<dp[n][n*(n+1)/4]<<endl;elsecout<<0<<endl;return0;}
http://www.jsqmd.com/news/1176136/

相关文章:

  • Unity开发Hololens混合现实应用:从环境搭建到性能优化的完整指南
  • 深圳居住证申请签注的详细流程
  • 2026年7月最新萧邦南京建邺万达广场维修保养服务电话 - 萧邦中国官方服务中心
  • 2026年7月商用版 广州写字楼设备更新回收 错峰施工不影响营业 配电房弱电机房整体拆除 - 广东再生资源回收
  • OpenAPI 3.0迁移策略:使用OAS-Kit平滑升级的最佳实践
  • OAS-Kit reftools详解:引用处理的核心技术与实现原理
  • 南京宝珀回收价格查询和各大回收平台实测排行(2026年7月最新数据) - 嘉价奢侈品回收平台
  • 亲身到店探访广州芝柏官方售后服务中心|最新地址及官方服务热线(2026年7月最新) - 亨得利官方服务中心
  • Serverless Application Repository图像处理服务:5步实现云端图片自动缩放与格式转换
  • 比较长的字符串中,是否含有特定字符串_repeat
  • 2026全球EMBA理性测评 科学选型指南
  • 2026年7月电力版 深圳工业园区配电中心电力机房一体化回收 持证作业安全规范 - 广东再生资源回收
  • 2026年7月最新扬州美度官方售后服务网点地址及客服电话一览 - 亨得利钟表维修中心
  • 2026年7月最新合肥天梭官方售后客户服务热线与维修网点地址汇总 - 天梭服务中心
  • STM32G431KB与MCP3551高精度ADC接口设计与优化
  • 【Bug已解决】openclaw session ID mismatch / Resume target not found — OpenClaw 会话 ID 不匹配解决方案
  • 2026新晋职场记者线下采访,职场沟通技巧怎么选更实用
  • 业务数据报表工具怎么选?职场及教育场景实用测评 - 品牌测评鉴赏家
  • 代码生成新突破:ProphetNet-Code模型使用与优化指南
  • 【架构实战】数据仓库分层:ODS、DWD、DWS、ADS最佳实践
  • 2026打工人表格工具实测|日常办公到底哪家强?AI+协作+模板全维度对比 - 品牌测评鉴赏家
  • 2026全球 EMBA 理性测评 科学选型指南
  • 2026年智能感应集成灶品牌五大天王横评:从技术参数到真实体验全维度对比 - 品牌报告
  • 【Bug已解决】openclaw workspace path too long / File path exceeds limit — OpenClaw 工作区路径过长解决方案
  • 【关注可白嫖源码】--课程设计+毕业设计+30887基于微信小程序的社区志愿者服务平台设计与实现(案例分析)
  • 宝珀中国官方售后服务中心|服务热线及官方维修地址权威信息公告(2026年7月最新) - 宝珀官方售后服务中心
  • Perfsee完全指南:前端性能分析与调试的终极工具集
  • 2026年7月最新徐州雅典官方售后服务热线与网点地址查询 - 亨得利官方服务中心
  • 参数压缩 500 倍还能涨点?Mapping Networks 让我重新思考“训练“的定义
  • ReactPrimer vs 传统开发:为什么组件原型工具是前端开发的必备神器