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

P1473 [USACO2.3] 零的数列 Zero Sum(DFS 回溯 + 状态维护+ 空格合并数字)

题目描述

请考虑一个由 1 到 N 的数字组成的递增数列:1,2,3,…,N

现在请在数列中插入 + 表示加,或者 - 表示减, (空格) 表示空白(例如 1-2 3 就等于 1-23),来将每一对数字组合在一起(请不要在第一个数字前插入符号)。

计算该表达式的结果并判断其值是否为 0。 请你写一个程序找出所有产生和为零的长度为N的数列。

输入格式

单独的一行表示整数 N(3≤N≤9)。

输出格式

按照 ASCI I码的顺序,输出所有在每对数字间插入 +- (空格) 后能得到结果为零的数列。

输入输出样例

输入 #1复制运行

7

输出 #1复制运行

1+2-3+4-5-6+7
1+2-3-4+5+6-7
1-2 3+4+5+6+7
1-2 3-4 5+6 7
1-2+3+4-5+6-7
1-2-3-4-5+6+7

说明/提示

翻译来自NOCOW

USACO 2.3



// 考点:DFS 回溯 + 状态维护(current_val/last_num/op)+ 空格合并数字#include<bits/stdc++.h>
using namespace std;// 存储所有结果为0的合法表达式
vector<string> result;
// 存储当前拼接的表达式路径(直接用string)
string path;
// 题目输入的N(保持long long,贴合你的变量类型)
long long N;// DFS枚举符号并计算表达式
// pos:当前处理到的数字(1~N)
// current_val:当前表达式计算结果
// last_num:上一个参与运算的数(处理空格合并用)
// op:上一个符号类型(0=初始/空格,1=+,2=-)
void dfs(long long pos, long long current_val, long long last_num, int op) {// 递归终止:处理完所有数字,结果为0则存入resultif (pos > N) {if (current_val == 0) {result.push_back(path);}return;}// 处理第一个数字(无前置符号)if (pos == 1) {path += to_string(pos); // 将数列中的数转换为字符后拼接数字dfs(pos + 1, pos, pos, 0);path.pop_back(); // 回溯return;}// 按ASCII顺序遍历3种符号:空格 → + → -(直接分支判断,无多余数组)// 1. 处理空格int len = path.size();path += ' ';path += to_string(pos);long long new_last = last_num * 10 + pos;if (op == 1) {dfs(pos + 1, current_val - last_num + new_last, new_last, op);} else if (op == 2) {dfs(pos + 1, current_val + last_num - new_last, new_last, op);} else {dfs(pos + 1, new_last, new_last, op);}path.erase(len); // 回溯// 2. 处理+len = path.size();path += '+';path += to_string(pos);dfs(pos + 1, current_val + pos, pos, 1);path.erase(len); // 回溯// 3. 处理-len = path.size();path += '-';path += to_string(pos);dfs(pos + 1, current_val - pos, pos, 2);path.erase(len); // 回溯
}int main(void) {cin >> N;// 初始调用:pos=1,初始值0,上一个数0,初始符号0dfs(1, 0, 0, 0);// 输出所有合法表达式(已按ASCII顺序存储)for (string expr : result) {cout << expr << endl;}return 0;
}


刚刚会普通dfs的新手该题目可以暂时跳过,逻辑较为复杂,等dfs熟练和刷题较多以后在回来看(力扣200题以上)

http://www.jsqmd.com/news/561520/

相关文章:

  • 实测才敢推!2026年超实用AI论文写作工具榜单,免费高效产出合规稿
  • SDMatte多风格背景合成效果展:商业级视觉作品创作
  • 【开题答辩全过程】以 个性化电影推荐系统为例,包含答辩的问题和答案
  • 消费级显卡轻松玩转百亿大模型微调?8步教你降维打击,显存成本打骨折!
  • GitHubDesktop2Chinese:颠覆式界面本地化工具,革新你的开发效率
  • centos软件包列表详解
  • Windows原生运行Android应用:APK Installer技术解析与使用指南
  • 保姆级教程:用YOLOv8+PyQt5打造你的番茄成熟度检测桌面应用(附完整源码与数据集)
  • 丹青幻境案例分享:我用它生成了这些绝美国风壁纸
  • Alt App Installer革新:突破微软商店限制的Windows应用安装解决方案
  • EasyTipView社区贡献指南:如何参与这个优秀的Swift开源项目
  • DeepSeek-Coder-V2:开源代码智能模型的性能突破与技术实现
  • 5步让Windows 11提速51%:Win11Debloat深度净化指南
  • Kubernetes 集群管理新视角:Kuboard 图形化实战与多集群部署解析
  • 别再重装OriginPro了!遇到盗版弹窗,试试这个修改Hosts文件的永久方案
  • 3个简单步骤,用opcode彻底改变你的Claude Code开发体验
  • 2026最新北京/广州家政服务推荐!住家/白班/钟点工/照顾老人/照顾孩子权威榜单 - 十大品牌榜
  • 动态对抗Zygisk-IL2CppDumper:Unity游戏安全新策略
  • 带隙基准电路实战:从仿真到优化的全流程解析
  • 电子课本下载终极指南:三步完成国家教育平台PDF高效获取
  • 如何快速实现单图像3D重建:TripoSR完整实战指南
  • 突破国际漫游限制:Nrfr免Root工具的终极解决方案
  • 计算机网络基础:理解伏羲模型客户端与服务器端的API通信全过程
  • 3.30(外加:构建之法阅读笔记02)
  • K8s面试官最爱问的5个冷门问题(附详细解析)
  • 2026最新母婴护理服务平台推荐!北京/广州优质机构权威榜单发布 - 十大品牌榜
  • 突破3大资源壁垒:UABEA工具实战指南
  • 打破显卡技术壁垒:OptiScaler让你在任意游戏中自由切换超采样技术
  • WaveTools鸣潮工具箱:深度技术解析与高级配置指南
  • Obsidian搜索避坑指南:为什么你的搜索结果总是不准确?