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

P1028 [NOIP2001 普及组] 数的计算

时刻记住一句话:写递归,1画图,2大脑放空!!!

意思是,自己写递归题目,先用样例给的数据画图,然后想一个超级简单的思路,直接套上去就可以了。

上题干:

题目描述

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

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

请你求出,一共有多少个合法的数列。

输入格式

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

输出格式

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

输入输出样例

输入 #1复制

6

输出 #1复制

6

说明/提示

样例 1 解释

满足条件的数列为:

  • 6
  • 6,1
  • 6,2
  • 6,3
  • 6,2,1
  • 6,3,1

数据规模与约定

对于全部的测试点,保证 1≤n≤10^3。

说明

本题数据来源是 NOIP 2001 普及组第一题,但是原题的题面描述和数据不符,故对题面进行了修改,使之符合数据。原题面如下,谨供参考:

我们要求找出具有下列性质数的个数(包含输入的正整数 n)。

先输入一个正整数 n(n≤1000),然后对此正整数按照如下方法进行处理:

  1. 不作任何处理;
  2. 在它的左边拼接一个正整数,但该正整数不能超过原数,或者是上一个被拼接的数的一半;
  3. 加上数后,继续按此规则进行处理,直到不能再加正整数为止。

 这道题,不要想那么复杂。

题目给的数字是6,并且帮我们分析了答案如何来的:

  • 6
  • 6,1
  • 6,2
  • 6,3
  • 6,2,1
  • 6,3,1

第一步:画图

我们可以画出一个简易的树状图:

 

第二步:大脑放空,想一个最简单的思路 

从i=0开始枚举,一直枚举到 6/2,

用 f【i】表示,6后面直接跟的数字是 i 的种数。(如果i=0,就代表,没有跟任何数字)

所以答案就是 f【0】+ f【1】 +f【2】+f【3】

结束

写出代码:

const int N = 1e3 + 7;
int lxnb(int x) {int ans = 0;if (x == 1 or x == 0)return 1;for (int i = 0; i <= x / 2; i++) {ans += lxnb(i);}return ans;
}int main() {int n;cin >> n;cout << lxnb(n);
}

然后,这样的普通递归,无法,完成本题。

所以我们可以用到记忆化的方法,用一个数组记录f【i】的值,如果f【i】已经被记录了 ,那么我们就直接返回,它的值。

无脑塞进去就行了,哪里需要管这么多。。。。

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#include<cctype>
#include<map>
#include<set>
#include<queue>
#include<numeric>
using namespace std;
const int N = 1e3 + 7;
int flag[N];
int lxnb(int x) {int ans = 0;if (flag[x])return flag[x];if (x == 1 or x == 0)return 1;for (int i = 0; i <= x / 2; i++) {ans += lxnb(i);}return flag[x]=ans;
}int main() {int n;cin >> n;cout << lxnb(n);
}

http://www.lryc.cn/news/241816.html

相关文章:

  • 浅析三相异步电动机控制的电气保护
  • Java设计模式系列:单例设计模式
  • 开拓新天地:探讨数位行销对医药产业医病连结的影响
  • [tsai.shen@mailfence.com].faust勒索病毒数据怎么处理|数据解密恢复
  • Peter算法小课堂—前缀和数组的应用
  • 线性表之链式表
  • [Docker]十.Docker Swarm讲解
  • 相机机模组需求示例
  • Uniapp 微信登录流程解析
  • 红旗Asianux Server Linux V8 安装万里数据库(GreatSQL)
  • 一文2000字使用JMeter进行接口测试教程!(建议收藏)
  • Spark---介绍及安装
  • uni-app:实现request请求的递归(设置request请求的访问次数),并且调用自定义方法给出返回值
  • 数据结构-归并排序+计数排序
  • Qml使用cpp文件的信号槽
  • 聚类笔记:HDBSCAN
  • 【Python】批量将PDG合成PDF,以及根据SS号重命名秒传的文件
  • 2023亚太杯数学建模A题思路 - 采果机器人的图像识别技术
  • 3、LeetCode之无重复字符的最长子串
  • CONDITIONS EVALUATION REPORT-解决方案
  • 计算机网络——路由
  • python+requests+pytest+allure自动化框架
  • css3
  • 超级应用平台(HAP)起航
  • cocos2dx ​​Animate3D(二)
  • 基于java技术的社区交易二手平台
  • (Matalb回归预测)GA-BP遗传算法优化BP神经网络的多维回归预测
  • 【Docker】从零开始:10.registry搭建私有仓库
  • 树莓派上使用Nginx通过内网穿透实现无公网IP访问内网本地站点
  • 长征故事vr互动教育体验系统让师生感同身受