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

信奥赛C++提高组csp-s之搜索进阶(记忆化搜索案例实践2)

信奥赛C++提高组csp-s之搜索进阶(记忆化搜索案例实践2)

数的计算

题目描述

给出正整数n nn,要求按如下方式构造数列:

  1. 只有一个数n nn的数列是一个合法的数列。
  2. 在一个合法的数列的末尾加入一个正整数,但是这个正整数不能超过该数列最后一项的一半,可以得到一个新的合法数列。

请你求出,一共有多少个合法的数列。两个合法数列a , b a, ba,b不同当且仅当两数列长度不同或存在一个正整数i ≤ ∣ a ∣ i \leq |a|ia,使得a i ≠ b i a_i \neq b_iai=bi

输入格式

输入只有一行一个整数,表示n nn

输出格式

输出一行一个整数,表示合法的数列个数。

输入输出样例 1
输入 1
6
输出 1
6
说明/提示
样例 1 解释

满足条件的数列为:

  • 6 66
  • 6 , 1 6, 16,1
  • 6 , 2 6, 26,2
  • 6 , 3 6, 36,3
  • 6 , 2 , 1 6, 2, 16,2,1
  • 6 , 3 , 1 6, 3, 16,3,1
数据规模与约定

对于全部的测试点,保证1 ≤ n ≤ 10 3 1 \leq n \leq 10^31n103

思路分析

题目大意

输入自然数 n,可以对它进行以下操作:

  • 不作任何处理
  • 在它左边加上一个不超过原数一半的自然数
  • 加上数后继续按此规则处理
    求所有可能的数的个数(包含原数本身)。
分析思路

f[x]表示数字 x 能生成的数的总数(包含 x 自身)。根据规则:

  • x 可以不作处理 → 1 种(即 x 本身)
  • 可以在左边加上 1, 2, …, floor(x/2) 作为新的数,这些新数又可以继续生成

所以f[x] = 1 + f[1] + f[2] + ... + f[floor(x/2)]

递归计算时会有大量重复计算,例如f[6]需要f[3]f[5]也需要f[2]等,因此需要用数组记录每个 x 已经计算过的结果。

代码实现

#include<bits/stdc++.h>usingnamespacestd;intn;intf[1005];// f[i]存储数字i能生成的数的总数,-1表示未计算intdfs(intx){if(f[x]!=-1)returnf[x];// 记忆化:已计算直接返回intsum=1;// 1表示原数本身(不作任何处理)for(inti=1;i<=x/2;i++){sum+=dfs(i);// 递归计算加上每个可能数字后的方案数}returnf[x]=sum;// 存备忘录并返回}intmain(){ios::sync_with_stdio(false);cin.tie(0);cin>>n;memset(f,-1,sizeof(f));// 初始化备忘录cout<<dfs(n)<<endl;return0;}

功能分析

模块功能说明
备忘录数组f[1005]存储每个数字对应的方案总数,-1表示未计算
dfs(x)递归计算数字 x 能生成的所有数的总数
累加循环枚举所有不超过 x/2 的自然数,递归计算它们的方案数并累加
原数计入sum 初始化为 1,代表“不作任何处理”的情况
时间优化通过记忆化,每个数字只计算一次,复杂度 O(n²) → O(n)

更多系列知识,请查看专栏:《信奥赛C++提高组csp-s知识详解及案例实践》:
https://blog.csdn.net/weixin_66461496/category_13113932.html


各种学习资料,助力大家一站式学习和提升!!!

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"########## 一站式掌握信奥赛知识! ##########";cout<<"############# 冲刺信奥赛拿奖! #############";cout<<"###### 课程购买后永久学习,不受限制! ######";return0;}

1、csp信奥赛高频考点知识详解及案例实践:

CSP信奥赛C++动态规划:
https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转

CSP信奥赛C++标准模板库STL:
https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转

信奥赛C++提高组csp-s知识详解及案例实践:
https://blog.csdn.net/weixin_66461496/category_13113932.html

2、csp信奥赛冲刺一等奖有效刷题题解:

信奥赛C++普及组csp-j初赛&复赛真题题解(持续更新)https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

信奥赛C++提高组csp-s初赛&复赛真题题解(持续更新)
https://blog.csdn.net/weixin_66461496/category_13125089.html

3、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转


GESP(C++ 七级+八级)真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13117178.html

4、csp/信奥赛C++,完整信奥赛系列课程(永久学习):

https://edu.csdn.net/lecturer/7901 点击跳转

· 文末祝福 ·

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"跟着王老师一起学习信奥赛C++";cout<<" 成就更好的自己! ";cout<<" csp信奥赛一等奖属于你! ";return0;}
http://www.zskr.cn/news/1466299.html

相关文章:

  • MusicFree插件系统完整指南:3分钟打造你的免费跨平台音乐聚合中心
  • Mythos:首个具备符号执行与攻击链建模能力的AI安全代理
  • Build 2026 刚讲完 Agent,我反而重看了一遍 MinerU
  • 3个核心优势+5大实战场景:BBDown命令行工具重塑B站视频下载体验
  • 掘金Web3海外蓝海,你准备好了吗?
  • 【真实数据】小鼠视神经星形胶质细胞(Optic Nerve Astrocytes)的分离培养和鉴定
  • 遗传算法工程落地实战:编码选择、选择压力与变异平衡
  • 深度解析AI Agent的规划能力:从思维链到分层任务分解的决策机制
  • 国密加密(流程)
  • 厦门验潮站MATLAB调和分析实操包:含6组可视化结果与残差诊断
  • 3个核心问题告诉你:为什么AnythingLLM是搭建私有AI助手的最佳选择?
  • 手机号定位神器:3秒查询归属地,地图精准定位位置
  • 如何在Windows家庭版上免费解锁远程桌面多用户连接:RDP Wrapper完全指南
  • 面向工程落地的LLM论文筛选方法论:可复现、低开销、快集成
  • 紫光PGL22G FPGA上跑Cortex-M1软核?手把手教你从Keil编译到ModelSim仿真的完整流程
  • 新手实测有效,OpenClaw 一键安装脚本使用详解从零起步
  • 2026年马尔代夫亲子游专业代理权威排行全解析 - 奔跑123
  • 2026年国内环氧树脂涂料厂家实力排行与实测分析 推荐廊坊安宏环保科技有限公司 - 奔跑123
  • Equalizer APO:免费开源音频处理神器,5步打造专业级音效体验
  • 雷达多目标干扰场景下频率捷变波形MATLAB仿真与抗干扰效果可视化
  • 2026监利市婚庆商家优选榜单|备婚首选电话联系方式汇总 - 资讯快报
  • 基于ERNIE大模型的Python狼人杀Web游戏,支持多角色自动推理与发言
  • 中文新闻情感打分小工具:不用GPU,靠TF-IDF+余弦相似度快速判别喜怒哀乐
  • 园艺开发专用植物数据库:观花/观叶/多肉/流行品种四类齐全,SQL/JSON/CSV/Excel全格式支持
  • 深度解析RePKG:高效提取Wallpaper Engine资源的专业解决方案
  • 微信公众号怎么发起投票,微信投票工具实测对比, - 投票小程序
  • Python库存优化实战:需求分解、Gamma交期建模与Pyomo求解
  • 告别Scope丑图!手把手教你用To Workspace+Plot美化SIMULINK仿真结果(附双Y轴代码)
  • 2026年国内乙烯基树脂涂料厂家实力排行:全维度实测对比 - 奔跑123
  • 南通如东县黄金回收行情9 7 5元/克 三大细节别忽略 - 上门黄金回收