[NOIP2001 普及组] 数的计算【递推】

news/2024/7/15 20:15:02 标签: 算法, 图论, c++

[NOIP2001 普及组] 数的计算

题目描述

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

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

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

输入格式

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

输出格式

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

样例 #1

样例输入 #1

6

样例输出 #1

6

提示

样例 1 解释

满足条件的数列为:

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

数据规模与约定

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

说明

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

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

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

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

感谢 @dbxxx 对本题情况的反馈,原题面的问题见本贴。

思路

第一想法应该是递归,但是范围是 1e3 会时间超限

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#include<stack>
#include<queue>
#include<sstream>
#include<map>
#include<unordered_map> 

#define x first
#define y second

using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
const int N = 100010;
const int MOD = 1000000007;
const int INF = 0x3f3f3f3f;

int gcd(int a, int b){return b ? gcd(b, a % b) : a;}
int lcm(int a, int b){return a * b / gcd(a, b);}
int lowbit(int x) {return x & -x;}

int n;

int dfs(int n)
{
	if(n == 1) return 1;
	int ans = 1;
	for(int i = 1; i <= n / 2; i ++ ) {
		ans += dfs(i);
	}
	return ans;
}

int main()
{
	cin >> n;
	cout << dfs(n) << endl;
	return 0;
}



在这里插入图片描述

推推可以优化成线性时间

f[1]=1
f[2]=2=f[1]+1
f[3]=2=f[1]+1
f[4]=4=f[1]+f[2]+1
f[5]=4=f[1]+f[2]+1
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#include<stack>
#include<queue>
#include<sstream>
#include<map>
#include<unordered_map> 

#define x first
#define y second

using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
const int N = 100010;
const int MOD = 1000000007;
const int INF = 0x3f3f3f3f;

int gcd(int a, int b){return b ? gcd(b, a % b) : a;}
int lcm(int a, int b){return a * b / gcd(a, b);}
int lowbit(int x) {return x & -x;}

int n;
int f[1010];

int main()
{
	cin >> n;
	for(int i = 1; i <= n; i ++ ) {
		for(int j = 1; j <= i / 2; j ++ ) {
			f[i] += f[j];
		}
		f[i] ++ ;
	}
	cout << f[n] << endl;
	return 0;
}





http://www.niftyadmin.cn/n/1679904.html

相关文章

python3 urllib模块的函数_python urllib模块有哪些?怎么用?

跟大家说过很多次模块的使用&#xff0c;但是对于专为爬虫而建立的库&#xff0c;里面的函数如何使用大家知道吗&#xff1f;urllib库是最常见的python爬虫专用库&#xff0c;里面涉及的函数内容也有很多&#xff0c;大家知道要怎么去使用吗&#xff1f;如果不清楚的话&#xf…

(转载)性能优化之布局优化

来源&#xff1a;http://www.trinea.cn/android/layout-performance/ 本文为Android性能优化的第二篇——布局优化&#xff0c;主要介绍使用抽象布局标签(include, viewstub, merge)、去除不必要的嵌套和View节点、减少不必要的infalte及其他Layout方面可调优点&#xff0c;顺带…

python 通达信k线_[python]沪深龙虎榜数据导入通达信的自选板块,并标注于K线图上...

1 #codingutf-823 #读取‘[paint]‘开头的csv文件4 #copyright WangXinsheng5 #http://www.cnblogs.com/wangxinsheng/6 importos7 importstruct8 importtime9 importdatetime1011 defgetPriceByte(infile,arg,code,ss,day):12 dirc {"-5":-3,"-3":-2,&q…

C++知识点总结(三)

1.字符串查找字符函数strchr strchr函数原型&#xff1a;extern char*strchr(const char *s,char c); 功能&#xff1a;查找字符数组s中首次出现字符c的位置 说明&#xff1a;返回首次出现c的位置的指针&#xff0c;返回偏移指针地址&#xff0c;如果s中不存在c则返回NULL。 #i…

k8s滚动升级_k8s滚动升级

为了服务升级过程中提供可持续的不中断的服务&#xff0c;Kubernetes 提供了rolling update机制&#xff0c;具体配置需要修改对应服务的yaml文件参数解析:minReadySeconds: 100 # 容器启动创建多少s后服务可用strategy:# indicate which strategy we want for rolling updatet…

ASP.NET中Web DataGrid的使用指南

ASP.NET中Web DataGrid的使用指南很久以前就想写一些关于DataGrid/DataList的东西&#xff0c;但是一直以来&#xff0c;一方面自感所学未深&#xff0c;另一方面&#xff0c;总觉无从下笔&#xff0c;一拖再拖&#xff0c;离刚开始的念头已距一年有余。DataGrid/DataList在ASP…

mysql text类型效率_优化InnoDB表BLOB,TEXT列的存储效率

首先&#xff0c;介绍下关于MySQL InnoDB引擎存储格式的几个要点&#xff1a;1、InnoDB可以选择使用共享表空间或者是独立表空间方式&#xff0c;建议使用独立表空间&#xff0c;便于管理、维护。启用 innodb_file_per_table选项&#xff0c;5.5以后可以在线动态修改生效&#…

Android CrashHandler全局异常

CrashHandler 介绍 Android 应用不可避免的会发生crash 即崩溃&#xff0c;无论程序写的多好&#xff0c;都会不可避免的发生崩溃&#xff0c;可能是由底层引起的&#xff0c;也有可能是写的代码引起的。当crash发生时&#xff0c;系统会kill掉正在执行的程序&#xff0c;现象…