题解:洛谷 P1118 [USACO06FEB] Backward Digit Sums G/S
本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。欢迎大家订阅我的专栏算法题解C与Python实现附上汇总贴算法竞赛备考冲刺必刷题C | 汇总【题目来源】洛谷P1118 [USACO06FEB] Backward Digit Sums G/S - 洛谷【题目描述】FJ和他的奶牛们喜欢玩一个心算游戏。他们将数字从1 11到N ( 1 ≤ N ≤ 12 ) N(1 \le N \le 12)N(1≤N≤12)按某种顺序写下来然后将相邻的数字相加得到一个数字更少的新列表。他们重复这个过程直到只剩下一个数字。例如游戏的一种情况当N 4 N4N4时可能是这样的31244367916在FJ背后奶牛们开始玩一个更难的游戏她们试图从最终的总和和数字N NN中确定起始序列。不幸的是这个游戏有点超出了FJ的心算能力。编写一个程序来帮助FJ玩这个游戏并跟上奶牛们的步伐。【输入】共一行两个正整数n , s u m n,sumn,sum。【输出】输出包括一行为字典序最小的那个答案。当无解的时候请什么也不输出。【输入样例】4 16【输出样例】3 1 2 4【核心思想】问题分析给定N NN和s u m sumsum需要找到一个1 11到N NN的排列使得按照相邻数字逐层相加规则类似杨辉三角的逐层求和最终得到的数字等于s u m sumsum。例如N 4 N4N4时排列( 3 , 1 , 2 , 4 ) (3,1,2,4)(3,1,2,4)的逐层求和过程为3 1 2 4 4 3 6 7 9 16这是一个DFS全排列搜索 剪枝优化问题关键在于利用逐层求和过程中b [ 1 ] b[1]b[1]单调递增的特性进行提前剪枝。算法选择DFS全排列枚举用book数组标记已使用的数字递归生成1 11到N NN的所有排列逐层求和验证calc()函数模拟题目描述的相邻相加过程计算最终值前缀剪枝在calc()中若某层求和后b [ 1 ] s u m b[1] sumb[1]sum立即返回− 1 -1−1避免无效搜索关键步骤DFS搜索当前步数s t e p stepstep剪枝验证调用calc()计算当前部分排列的逐层和若返回− 1 -1−1已超s u m sumsum则直接返回终止条件若s t e p N step NstepN且calc() sum输出当前排列并结束程序枚举尝试遍历i ii从1 11到N NN若b o o k [ i ] 0 book[i] 0book[i]0a [ s t e p ] i a[step] ia[step]ib o o k [ i ] 1 book[i] 1book[i]1递归d f s ( s t e p 1 ) dfs(step1)dfs(step1)回溯a [ s t e p ] 0 a[step] 0a[step]0b o o k [ i ] 0 book[i] 0book[i]0逐层求和计算calc()将a aa拷贝到c cc进行N − 1 N-1N−1轮相邻相加b [ j ] c [ j ] c [ j 1 ] b[j] c[j] c[j1]b[j]c[j]c[j1]每轮若b [ 1 ] s u m b[1] sumb[1]sum返回− 1 -1−1将b bb拷贝回c cc继续下一轮返回最终c [ 1 ] c[1]c[1]时间/空间复杂度时间复杂度O ( N ! ⋅ N 2 ) O(N! \cdot N^2)O(N!⋅N2)最坏枚举N ! N!N!个排列每个排列验证O ( N 2 ) O(N^2)O(N2)空间复杂度O ( N ) O(N)O(N)排列数组、标记数组及临时数组DFS剪枝的核心思想杨辉三角系数最终和 ∑ i 1 N a i × C ( N − 1 , i − 1 ) \sum_{i1}^{N} a_i \times C(N-1, i-1)∑i1N​ai​×C(N−1,i−1)即每个位置i ii的贡献系数为组合数。但代码采用直接模拟更直观前缀单调性剪枝逐层求和过程中b [ 1 ] b[1]b[1]是a aa中前若干元素的加权和随着排列增长单调不减对于正数一旦超过s u m sumsum可立即剪枝字典序最小保证DFS按1 11到N NN的顺序枚举首次找到的合法解即为字典序最小解全排列模板标准的book标记 回溯框架适用于N ≤ 12 N \le 12N≤12的小规模排列搜索适用于排列约束满足 可验证目标值类问题核心是利用目标函数的单调性进行有效剪枝【解题思路】【算法标签】#普及 #DFS-一维【代码详解】#includebits/stdc.husingnamespacestd;intn,sum,a[15],b[15],c[15],book[15];intcalc()// 按照游戏规则计算{for(inti1;in;i){// 将a数组拷贝至c数组c[i]a[i];}for(inti1;in;i){// 依次遍历c数组中所有数for(intj1;jn;j){// 相邻两个数相加并赋值给b数组b[j]c[j]c[j1];}if(b[1]sum){// 如果计算后b[1]已经大于sum则无需继续计算返回-1return-1;}for(intj1;jn;j){// 将b数组拷贝至c数组进行下一轮计算c[j]b[j];}}returnc[1];// 返回c数组第1个元素的值}voiddfs(intstep){inttmpcalc();// 剪枝每次都计算一下if(tmp-1)return;// 如果c[1]已经超过sum后面就不用算了if(stepn){// 搜索退出条件if(tmpsum){// 如果等于sumfor(inti1;in;i){// 则输出a数组couta[i] ;}coutendl;exit(0);// 并退出程序}return;// 如果不等于即小于还要继续搜索}for(inti1;in;i){// 全排列模板if(book[i]0){// 如果某个数没有被用过a[step]i;// 就用这个数book[i]1;// 并标记用过dfs(step1);// 进行下一次搜索a[step]0;// 还原现场book[i]0;}}}intmain(){cinnsum;// 输入n和sumdfs(1);// 进行dfs深搜return0;}【运行结果】4 16 3 1 2 4

相关新闻

【深度学习新浪潮】Meta Muse 智能体:它是什么?有哪些特点?为什么突然火了?

【深度学习新浪潮】Meta Muse 智能体:它是什么?有哪些特点?为什么突然火了?

1. 引言 近期,Meta Muse 智能体在 AI 领域引发广泛关注,开发者、创作者与科技从业者纷纷展开讨论。许多初次接触者不禁疑惑:这是 Meta 推出的又一款大模型?抑或仅是蹭热度的 AI 玩具? 事实并非如此。Meta Muse 是 Meta 在 AI 智能体方向的一次战略性布局,它并非简单的对…

2026/10/12 2:24:22 阅读更多 →
Spring-boot-3 -注解 yaml配置 -日志

Spring-boot-3 -注解 yaml配置 -日志

4、核心技能1. 常用注解SpringBoot 摒弃 XML 配置方式,改为全注解驱动1. 组件注册Configuration 自定义配置类、SpringBootConfiguration 用来标注SpringBoot主启动类的Bean 可以在自定义配置类面创建对象交给ioc容器,组件在容器中的名字为方法名、Scope…

2026/10/12 2:24:22 阅读更多 →
Neuroimage: 动态功能连接方法的重测信度比较

Neuroimage: 动态功能连接方法的重测信度比较

本篇文献发表在Neuroimage杂志。所发布内容旨在与大家分享学术新知,促进交流学习版权归原作者或原出处所有,感谢各位学者的辛勤付出与研究成果。1.引言大脑的功能组织具有丰富的时空结构,可以使用功能连接指标进行探测。功能连接被定义为两个…

2026/10/12 2:24:22 阅读更多 →

最新新闻

PLC基本指令详解:从位逻辑到定时计数,掌握梯形图编程核心

PLC基本指令详解:从位逻辑到定时计数,掌握梯形图编程核心

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 3:19:56 阅读更多 →
柔性上料盘如何替代振动盘:从换型瓶颈到视觉引导的产线升级指南

柔性上料盘如何替代振动盘:从换型瓶颈到视觉引导的产线升级指南

简介:《全球与中国柔性上料盘市场现状及未来发展趋势(2024版)》是一份QYResearch出品的专业市场研究报告,面向柔性上料与自动化产线设备从业者、工业机器人厂商、市场分析师及投资研究人员。报告以2019至2023年为历史期、2024至20…

2026/10/12 3:19:56 阅读更多 →
WiFi分析工具设计实战:从数据采集到信道优化与故障排查

WiFi分析工具设计实战:从数据采集到信道优化与故障排查

1. 从一个标题说起:这个工具到底在解决什么问题第一次看到“Jev powered WiFi analysis tool”这个标题,我的直觉是:这大概率是一个把无线网络分析能力封装成轻量级工具的项目,名字里的“Jev”可能是作者自定的代号、模块名或者某…

2026/10/12 3:19:56 阅读更多 →
SpringBoot+Vue美食网站系统:前后端分离全栈项目架构与部署详解

SpringBoot+Vue美食网站系统:前后端分离全栈项目架构与部署详解

做个人项目这些年,前后端分离的练手项目做了不少,但每次有人让我推荐一个既能完整跑起来、又能覆盖主流开发流程的学习项目,我第一反应往往是这套美食网站系统。为什么?因为它的技术选型非常贴近当下中小型项目的真实组合&#xf…

2026/10/12 3:19:56 阅读更多 →
高斯赛德尔迭代法:大规模稀疏线性方程组的工程解法与实战技巧

高斯赛德尔迭代法:大规模稀疏线性方程组的工程解法与实战技巧

线性方程组这东西,刚接触数值计算的时候,总觉得不是事——高斯消元一把梭,n100也就是眨眨眼的事。可等你真在工程里碰到几十万未知量、矩阵非零元稀稀落落排成带状或块状的时候,直接法的“快”就变成了一种幻觉:要么内…

2026/10/12 3:19:56 阅读更多 →
attrs 比较机制完全指南:默认相等性、排序生成与自定义比较(Comparison)

attrs 比较机制完全指南:默认相等性、排序生成与自定义比较(Comparison)

后端 【免费下载链接】attrs Python Classes Without Boilerplate 项目地址: https://gitcode.com/gh_mirrors/at/attrs 点击查看 免费下载 本文围绕 attrs 官方文档 docs/comparison.md 展开,系统讲解 attrs 类实例的相等性(equality&#…

2026/10/12 3:18:56 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →