P1028 [NOIP2001 普及组] 数的计算 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

一开始是想暴力搜索的,也就是枚举比n/2小的数,但是只过了5个点,其他点都TLE

然后就开始想有没有优化方法

以6为例子

6/2=3,那么以6为首的长度为2的序列就有61,62,63,也就是所有小于等于3的数的个数

接下来,我们找长度为3的序列的个数,只需要关注第二位的数字即可, 也就是说只需要找到以1,2,3为首的序列的个数相加即可

至此可以知道N[6]=N[3]+N[2]+N[1]+1;同理,N[3]=N[1]+1,N[2]=N[1]+1,N[1]=1;

这里的加1指的是只有首元素的序列,由此我们可以得出N[k]=N[1]+N[2]+......+N[k/2]+1的递推公式,这样递推下去,知道推到初始值N[1]=1就可以得出答案了

同时防止重复计算某个位置的值,采用记忆化搜索策略,否则还是会TLE

AC代码

 1 #include<iostream>
2 #include<cstdio>
3 #include<algorithm>
4 using namespace std;
5 int cnt = 1;
6 int dp[1010] = { 0 };
7 int Solve(int n)
8 {
9
10 if (dp[n] == 0)//当此位置为被计算过才进行计算后返回,否则直接返回
11 {
12 if (n == 1)
13 {
14 dp[n] = 1;
15 return dp[n];//边界返回
16 }
17 for (int i = 1; i <= n / 2; i++)
18 {
19 dp[n] += Solve(i);//累加
20 }
21 dp[n] += 1;
22 }
23 return dp[n];
24 }
25 int main()
26 {
27 int n;
28 cin >> n;
29 Solve(n);
30 cout << dp[n];
31 }

记忆化搜索 P1028 数的计算的更多相关文章

  1. (记忆化搜索)数塔 (zznu 1271)

    http://acm.zznu.edu.cn/problem.php?id=1271 1271: 数塔 时间限制: 1 Sec  内存限制: 128 MB提交: 109  解决: 78[提交][状态] ...

  2. [ACM_动态规划] 数字三角形(数塔)_递推_记忆化搜索

    1.直接用递归函数计算状态转移方程,效率十分低下,可以考虑用递推方法,其实就是“正着推导,逆着计算” #include<iostream> #include<algorithm> ...

  3. hdu 1428(很好的一道题,最短路+记忆化搜索)

    漫步校园 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  4. HDU 1208 Pascal's Travels 经典 跳格子的方案数 (dp或者记忆化搜索)

    Pascal's Travels Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Su ...

  5. 洛谷P2657 [SCOI2009]windy数 [数位DP,记忆化搜索]

    题目传送门 windy数 题目描述 windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道, 在A和B之间,包括A和B,总共有多少个win ...

  6. 1026-windy数+数位DP+记忆化搜索

    1026: [SCOI2009]windy数 题意:数位DP模板题: 目前只理解了记忆化搜索,就想练练手, ------给递推写法留一个位子 ------ 注意这道题要判断前导0的情况,1 )可以加一 ...

  7. 牛客假日团队赛5 F 随机数 BZOJ 1662: [Usaco2006 Nov]Round Numbers 圆环数 (dfs记忆化搜索的数位DP)

    链接:https://ac.nowcoder.com/acm/contest/984/F 来源:牛客网 随机数 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言6 ...

  8. 路径方案数_mod_SPFA_记忆化搜索_C++

    本文含有原创题,涉及版权利益问题,严禁转载,违者追究法律责任 本来是写个 DP 分分钟就 A 了,结果老师要我们写记忆化搜索(无奈脸) 算啦,随手一改又是一个标准的记忆化搜索(目测好像是记忆化搜索容易 ...

  9. hdu3555 Bomb (记忆化搜索 数位DP)

    http://acm.hdu.edu.cn/showproblem.php?pid=3555 Bomb Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  10. 数位dp/记忆化搜索

    一.引例 #1033 : 交错和 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个数 x,设它十进制展从高位到低位上的数位依次是 a0, a1, ..., an  ...

随机推荐

  1. 技术分享 | 不同格式标准SBOM清单横评:SPDX、CDX和DSDX

    为了保证安全性.降低开发.采购及维护的相关成本,复杂动态的现代软件供应链对软件资产透明度提出了更高的要求.使用清晰的软件物料清单(SBOM)收集和共享信息,并在此基础上进行漏洞.许可证和授权管理等,可 ...

  2. element-ui el-menu 刷新保持高亮的写法

    1 <template> 2 <el-menu 3 :collapse="isCollapse" 4 :default-active="defaultA ...

  3. C# 加解密

    1.  Md5 /// <summary> /// 不可逆加密 /// 1 防止被篡改 /// 2 防止明文存储 /// 3 防止抵赖,数字签名 /// </summary> ...

  4. notepad++的使用技巧

    一.多标签管理 1.可支持多个标签的展示

  5. CoinBase是什么?

    什么是CoinBase交易? 比特币区块链上的每个区块中都会包含一个或者多个交易(transaction),其中第一个交易就叫做CoinBase交易. 什么是CoinBase交易? CoinBase交 ...

  6. spring--JDK动态代理和CGLIB代理的区别

    JDK 动态代理和 CGLIB 代理是 Java 中常用的两种动态代理实现方式,它们各有特点和适用场景: JDK 动态代理: JDK 动态代理是基于接口的代理方式,它使用 Java 反射机制来创建代理 ...

  7. [转帖]ORACLE等待事件:enq: TX - row lock contention

    https://www.cnblogs.com/kerrycode/p/5887150.html enq: TX - row lock contention等待事件,这个是数据库里面一个比较常见的等待 ...

  8. [转帖]Jmeter连接InfluxDB2.0.4

    Jmeter连接InfluxDB2.0.4 问题描述:在用Jmeter+InfluxDB构建监控时,因为docker构建的InfluxDB的版本是2.0.4,按照网上的教程进行后端监听器的填写,但是一 ...

  9. [转帖]Jmeter学习笔记(二十三)——生成HTML性能报告

    https://www.cnblogs.com/pachongshangdexuebi/p/11759316.html 有时候我们写性能报告的时候需要一些性能分布图,JMeter是可以生成HTML性能 ...

  10. [转帖]Megacli 错误码

    MegaCLI Error Messages 0x00 Command completed successfully 0x01 Invalid command 0x02 DCMD opcode is ...