发布时间:2026/9/4 9:40:35
UVa 668 Parliament 题目描述议会由NNN名代表组成要求将他们分成若干个大小互不相同的小组每天每个小组派出一名代表组成调解委员会且每天委员会的组成必须不同。议会持续工作直到无法再产生新的委员会。要求找到一种分组方案使得议会能工作最长时间并输出各组的大小升序。输入格式第一行为整数MMM表示数据集个数。每组数据包含一个整数NNN5≤N≤10005 \le N \le 10005≤N≤1000。各组之间用一个空行分隔。输出格式对于每组数据输出一行包含若干整数表示分组大小升序空格分隔。每组输出之间用一个空行分隔。样例输入2 7 31输出3 4 2 3 5 6 7 8题目分析本题本质上是一个整数拆分问题将NNN拆分为若干个互不相同的正整数之和使得这些数的乘积最大并输出这些数。因为委员会每天的不同组合数等于所有小组大小的乘积每个小组每天派出一人不同组合数为∏sizei\prod \textit{size}_i∏sizei​要使议会工作最久即最大化乘积。已知结论对于正整数拆分若允许重复则尽量拆分为333但此处要求互不相同因此应选择从222开始的一段连续整数然后将剩余部分均匀分配到较大的数上或者将剩余部分加到最大的数上具体调整。更常用的解法是动态规划。解题思路动态规划设dp[s]\textit{dp}[s]dp[s]表示将总和sss拆分为互不相同的正整数时能获得的最大乘积。同时记录last[s]\textit{last}[s]last[s]表示在最优拆分中最后一个最大的数以便回溯输出方案。转移对于当前总和sss尝试将最后一个数设为jjjjlast[s−j]j \textit{last}[s-j]jlast[s−j]以保证互不相同则dp[s]max⁡(dp[s],dp[s−j]×j)\textit{dp}[s] \max(\textit{dp}[s], \textit{dp}[s-j] \times j)dp[s]max(dp[s],dp[s−j]×j)。初始dp[2]2\textit{dp}[2] 2dp[2]2dp[3]3\textit{dp}[3] 3dp[3]3dp[4]4\textit{dp}[4] 4dp[4]4因为444可以拆为444或131313但111无意义故直接取444。实际上从222开始。由于N≤1000N \le 1000N≤1000动态规划O(N2)O(N^2)O(N2)完全可行。回溯输出从NNN开始根据last[N]\textit{last}[N]last[N]不断减去该数直到N0N0N0得到所有拆分出的数升序输出。复杂度分析动态规划O(N2)O(N^2)O(N2)N≤1000N \le 1000N≤1000约10610^6106次运算极快。空间复杂度O(N)O(N)O(N)。代码实现// Parliament// UVa ID: 668// Verdict: Accepted// Submission Date: 2017-10-26// UVa Run Time: 0.050s//// 版权所有C2017邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;constintPOSITIVE1,NEGATIVE-1,EQUAL0;classBigInteger{friendBigIntegeroperator*(constBigInteger,constBigInteger);friendintcompare(constBigInteger,constBigInteger);friendbooloperator(constBigInteger,constBigInteger);public:BigInteger(){};BigInteger(constint);~BigInteger(){};private:voidzeroJustify(void);staticconstintbase10000;staticconstintwidth4;intsign;vectorintdigits;};BigInteger::BigInteger(constintvalue){if(value0){signPOSITIVE;digits.push_back(0);}else{sign(value0?POSITIVE:NEGATIVE);intnumberabs(value);while(number){digits.push_back(number%base);number/base;}}zeroJustify();}voidBigInteger::zeroJustify(void){for(intidigits.size()-1;i1;i--){if(digits[i]0)digits.erase(digits.begin()i);elsebreak;}if(digits.size()1digits[0]0)signPOSITIVE;}intcompare(constBigIntegerx,constBigIntegery){if(x.signPOSITIVEy.signNEGATIVE||x.signNEGATIVEy.signPOSITIVE)return(x.signPOSITIVE?1:-1);intxDigitNumberx.digits.size()-1;for(;xDigitNumberx.digits[xDigitNumber]0;xDigitNumber--);intyDigitNumbery.digits.size()-1;for(;yDigitNumbery.digits[yDigitNumber]0;yDigitNumber--);if(xDigitNumberyDigitNumber)return(x.signPOSITIVE?1:-1);if(xDigitNumberyDigitNumber)return(x.signNEGATIVE?1:-1);for(intindexxDigitNumber;index0;index--){if(x.digits[index]y.digits[index])return(x.signPOSITIVE?1:-1);if(x.digits[index]y.digits[index])return(x.signNEGATIVE?1:-1);}return0;}booloperator(constBigIntegerx,constBigIntegery){returncompare(x,y)0;}BigIntegeroperator*(constBigIntegerx,constBigIntegery){BigInteger z;z.signx.sign*y.sign;z.digits.resize(x.digits.size()y.digits.size());fill(z.digits.begin(),z.digits.end(),0);for(inti0;iy.digits.size();i)for(intj0;jx.digits.size();j){z.digits[ij]x.digits[j]*y.digits[i];z.digits[ij1]z.digits[ij]/z.base;z.digits[ij]%z.base;}z.zeroJustify();returnz;}constBigInteger ZEROBigInteger(0),ONEBigInteger(1),TWOBigInteger(2);BigInteger product[1010];intmemo[1010];intmain(intargc,char*argv[]){cin.tie(0),cout.tie(0),ios::sync_with_stdio(false);for(inti0;i1001;i)product[i]ZERO;for(inti2;i4;i)product[i]BigInteger(i),memo[i]i;for(inti2;i1001;i)for(intjmemo[i]1;ji1001;j){BigInteger tproduct[i]*BigInteger(j);if(product[ij]t){product[ij]t;memo[ij]j;}}intcases;cincases;intn;for(intc1;ccases;c){cinn;vectorintsequence;while(n0){sequence.push_back(memo[n]);n-memo[n];}if(c1)cout\n;reverse(sequence.begin(),sequence.end());for(inti0;isequence.size();i){if(i)cout ;coutsequence[i];}cout\n;}return0;}总结本题通过动态规划求最大乘积拆分并记录拆分方案输出分组大小。关键点包括将问题转化为最大化乘积的互不相同正整数拆分。使用大整数存储乘积因为N1000N1000N1000时乘积极大。记录memo[s]表示最优拆分中最大的数方便回溯。该解法是动态规划在整数拆分中的典型应用适用于NNN中等规模的问题。输出时注意每组间的空行。

相关新闻

2026/9/4 9:39:22

计算机毕业设计之jsp青岛黄海学院志愿者服务系统的设计与实现

快速发展的社会中,人们的生活水平都在提高,生活节奏也在逐渐加快。为了节省时间和提高工作效率,越来越多的人选择利用互联网进行线上打理各种事务,然后线上管理系统也就相继涌现。与此同时,人们开始接受方便的生活方式…

2026/9/1 23:14:46

GPU利用率优化:提升AI模型推理性能的关键技术

1. 为什么GPU利用率对AI模型推理如此重要在AI模型推理场景中,GPU利用率直接决定了硬件资源的投入产出比。我曾在多个实际项目中遇到这样的情况:部署的模型虽然能正常运行,但GPU监控面板上的利用率曲线长期在30%以下波动,这意味着企…

2026/9/4 9:36:48

Vue+SpringCloud博客系统:微服务架构与全栈开发实战

简介:这是一套基于Vue与Spring Cloud构建的全栈式博客系统实战项目,面向Java后端、前端及微服务架构学习者,解决分布式系统开发、前后端分离实践与主流中间件集成等核心问题。资源包共1025个文件,涵盖265个Java微服务模块代码、36…

2026/9/4 9:36:48

LBP纹理特征提取原理与Matlab实战

简介:本资源是一套面向图像处理初学者与计算机视觉实践者的MATLAB纹理特征提取教学包,聚焦局部二值模式(LBP)这一经典、轻量且鲁棒的纹理描述方法,解决图像分类、目标识别等任务中底层特征建模的实际需求。压缩包共5个…

2026/9/4 9:36:48

Java封装的iOS重签名系统原理与部署实践

简介:这是一套面向Java开发者与企业级电子签名系统实施人员的高价值开源解决方案,聚焦于快速构建安全、合规的电子签名服务,适用于互联网金融、电商签约、政务平台等对签名合法性与不可抵赖性要求严苛的场景。压缩包共433个文件,含…

2026/9/4 9:36:48

如何借助语音智能体实现数字员工的高效销售布局?

数字员工在现代企业中逐渐成为优化业务流程、降低成本和提升效率的重要力量。通过语音智能体的整合,数字员工能够自动化处理大量重复性任务,从而减少人力资源的浪费。对于企业而言,这意味着可以节省与客户沟通相关的时间与人力成本&#xff0…

2026/9/4 9:31:48

智能体相关知识

1.智能体和工作流的区别 工作流是 “按固定规则执行的步骤序列”,智能体是 “能自主决策的智能实体”。对比维度智能体(Agent)工作流(Workflow)核心目标自主达成「模糊目标」(如 “解决用户问题”“整理周报…

2026/9/3 18:28:26

vSound小提琴数字处理器实操指南:从接线到演出的完整配置

电小提琴或者原声小提琴插电演出,第一个绕不开的坎就是声音难听。原声琴的共鸣和空气感一旦进了拾音器,出来的往往是一坨干瘪、发尖、带着奇怪塑料味的信号。我当初第一次把琴接上乐队调音台,直接被主唱吐槽"你这声音像在锯钢丝"。…

2026/9/3 14:29:47

传感器接口IC如何攻克生物化学传感的微弱信号难题?

1. 从电极到比特流:为什么生物化学传感必须依赖专用接口IC 做生物化学传感的人都有过类似的经历:明明传感器本身性能很好,信号输出却一塌糊涂——噪声大、漂移明显、重复性差,怎么调都达不到预期。很多时候问题并不在传感器&#…

2026/9/3 14:30:35

STM32F411CEU6多通道ADC采集:扫描模式+DMA实现详解

1. 多通道 ADC 的用武之地把“Multichannel ADC”和“STM32F411CEU6”这两个关键字放在一起,其实就是嵌入式开发里最常遇到的一类需求:用一块不算贵的 MCU,同时采集多路模拟信号。STM32F411CEU6 是 48 引脚的 Cortex-M4F 主控,主频…

2026/9/4 0:00:58

STM32H743 SPI从机DMA双缓冲通信实战

简介:本资源是面向嵌入式开发工程师与STM32进阶学习者的SPI DMA双机通信从机端完整实现方案,聚焦STM32H743高性能Cortex-M7单片机在工业控制与高速数据交互场景下的从机通信开发痛点。压缩包含1355个文件,主体为599个C源码与321个头文件&…

2026/9/4 0:00:58

CPU开盖降温教程:20元成本让温度直降30度的原理与实践

最近很多朋友都在抱怨,自己的电脑一到夏天就变成"烤箱",玩游戏时CPU温度动不动就飙到90度以上,风扇噪音堪比直升机。更让人头疼的是,明明配置不错,却因为高温降频导致性能大打折扣。如果你也遇到了类似问题&…

2026/9/4 0:00:58

ArkTS 表单工程:场地预约页的三态场次 Grid 与校验

ArkTS 表单工程:场地预约页的三态场次 Grid 与校验 App 14「运动场地预约」场地 Tab(Func1Tab),是整 App 交互最丰富的页面——场地横向切换 三色图例 渐变预约预览卡 快捷模板 今日场次 Grid(可选/已选/已满三态&…

2026/9/3 20:43:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/3 17:51:43

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/3 21:06:57

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…