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

2026.04.13 作业 - # AtCoder 453 C - Stick Crossing

中文题面

你有 \(N\) 根棍子,按顺序使用它们。

  • 初始位置在原点右侧附近(代码中用 \(0.5\))。
  • 对于第 \(i\) 根棍子,你可以选择向右延伸(当前位置 \(+a[i]\)),或向左延伸(当前位置 \(-a[i]\))。
  • 如果延伸后位置从正变负,或从负变正(穿过了原点 \(0\)),得分 \(+1\)

算法

思考:枚举每一步的方向,两种选择。做优化剪枝

#include<bits/stdc++.h>
using namespace std;int n, a[30];
int Ans; void dfs(int k, double pos, int cnt) {// ===================== 剪枝(关键优化) =====================// 如果当前得分 + 剩下所有棍子全穿越 < 已找到的最优解// 剩下棍子数 = n - k + 1// 这种分支不可能更优,直接返回,不再递归if (cnt + (n - k + 1) < Ans) return;if (k == n + 1) {Ans = max(cnt, Ans);  return;}double p1, p2;int cnt1, cnt2;// ===================== 选择 1:向右走 =====================p1 = pos + a[k]; if (p1 * pos < 0) cnt1 = cnt + 1; else cnt1 = cnt;dfs(k + 1, p1, cnt1);          // 处理下一根棍子// ===================== 选择 2:向左走 =====================p2 = pos - a[k];               // 向左延伸后的位置if (p2 * pos < 0) cnt2 = cnt + 1; else cnt2 = cnt;dfs(k + 1, p2, cnt2);          // 处理下一根棍子
}int main(){cin >> n;for (int i = 1; i <= n; i++) cin >> a[i];dfs(1, 0.5, 0);cout << Ans << endl;  return 0;
}

核心要点总结

  1. 穿越判断
    新位置 × 原位置 < 0 → 穿过原点 → 得分 +1

  2. 初始位置 0.5
    避免从 0 开始,保证第一次判断有效。

  3. 剪枝超级重要
    cnt + (n - k + 1) < Ans
    剩下的棍子就算全部穿越,也超不过当前最优 → 直接剪枝

  4. 时间复杂度
    \(O(2^n)\)\(n ≤ 20\) 完全能跑过。

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

相关文章:

  • 一个配方在精细化工企业里如何从“Excel+微信”变成结构化数据——3个月减少32%重复实验的真实记录
  • 你的空间权重矩阵选对了吗?深度解读Stata中6种矩阵的适用场景与避坑要点
  • PCB模块化设计进阶:VGA高速信号完整性优化与布线实战
  • 一台适配多场景 华硕灵耀 14 双屏 2026 解锁办公创作新体验
  • 2026年3月热门的出口退税咨询公司口碑推荐,解决出口退税申报疑难问题 - 品牌推荐师
  • 从TLE文件到可见性分析:用Matlab批量处理Starlink卫星过顶预报
  • 官方认证|2026年北京五大正规装修半包设计公司排名,得得美家口碑断层领先 - 博客万
  • 保姆级教程:从Java环境到许可证配置,一步步搞定UG NX 10.0安装(附8.5-12.0通用方法)
  • 用Python和NumPy实现Randomized SVD:处理大图像压缩速度提升17倍的实战代码
  • 高效处理Microsoft Access数据库的终极指南:MDB Tools深度解析
  • SITS2026年度白皮书首发(仅限前500名开发者下载):AI代码搜索工具如何将平均调试时间从47分钟压缩至6.8分钟?
  • 当手绘思维遇见数字协作:Excalidraw如何重新定义你的创意表达
  • Windows Cleaner终极指南:如何快速解决C盘爆红问题,让电脑重获新生!
  • 璞华亮相2026苏州 “AI+制造” 对接会,全场景AI方案赋能服装产业数智化升级
  • OpenHarmony系统参数实战:从param shell到ArkTS接口,手把手教你调试与避坑
  • 新手必看:用MATLAB实现FMCW雷达距离FFT的5个常见错误及解决方法
  • 小心你的安全软件!360/火绒可能‘误杀’你的MySQL连接(附恢复步骤)
  • UniApp WebView通信SDK版本怎么选?从1.5.6到最新版,我的踩坑与升级指南
  • 2026上海学历提升机构对比评测:5大热门机构全方位横评,谁更值得托付? - 商业科技观察
  • Camunda实战入门:从零构建一个Spring Boot审批流程
  • Python移动应用开发实战指南:python-for-android 5大核心优势解析
  • PAT天梯赛L2-2病毒溯源题解:用邻接表和DFS找最长变异链(附C++代码避坑点)
  • 科技企业项目督办与跨部门协同实践与完整案例总结 - 搭贝
  • Path of Building:流放之路角色构建的3大核心价值解析
  • 从零开始:手把手教你用FPGA实现UART通信(Verilog代码解析)
  • 2026年水泥支撑、水泥垫块行业优质供应商推荐(工程采购专用) - 深度智识库
  • ABAP VA31销售计划协议:基于BAPI的批量创建与变更实战
  • 项目管理中的敏捷与传统方法融合实践
  • 从PAM模块缺失到服务启动:深入解析systemctl start lightdm失败的诊断与修复
  • 2026年华东华中热力系统工程建设与蒸汽保温管道运营服务完整指南(含官方专线) - 企业名录优选推荐