欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数的计算---递推

程序员文章站 2022-07-05 14:54:06
...

数的计算:

洛谷

题目描述

我们要求找出具有下列性质数的个数(包含输入的自然数nn):

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

1:不作任何处理;

2:在它的左边加上一个自然数,但该自然数不能超过原数的一半;

3:加上数后,继续按此规则进行处理,直到不能再加自然数为止.

输入输出格式

输入格式:
11个自然数nn(n \le 1000n≤1000)

输出格式:
11个整数,表示具有该性质数的个数。

输入输出样例

输入样例#1:
6
输出样例#1:
6
说明

满足条件的数为

6,16,26,126,36,136

题目分析:

1:自己最开始想复杂了,居然去dfs了,真是傻,感觉自己没咋懂啥时候用递推

方法:递推

我们可以发现这样一个规律:
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

so:

Code:

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int n;
	scanf("%d",&n);
	int f[1005];
	memset(f,0,sizeof(f));//记得要赋初值,不然要炸!
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=i/2;j++)
		{
			f[i]+=f[j];
		}
		f[i]++;
	}
	printf("%d",f[n]);
	return 0;
}
相关标签: 递推