算法竞赛经典 递推算法 数的计数

【问题描述】数的计数(people.cpp/c/pas) NOIP2001

“修罗王的召唤听见了听见了,黑暗军团的勇士们咆哮了咆哮了,看神国的圣殿动摇了动摇了,我仰天大笑是我们进攻的时候了,哈哈哈哈哈哈……”当漫山遍野响起黑暗军团的战歌时,郁闷的邪狼却在一遍遍地反复计算黑暗军团的总人数。

计算方法是这样的,输入一个自然数n(n≤1000),然后对此自然数按照如下方法进行处理:

(1)不做任何处理;

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

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

则具备上面性质的数的个数(包含输入的自然数n)即是黑暗军团的人数。

【输入格式】

一个自然数n。

【输出格式】

输出数的个数。

【输入样例】

6

【样例说明】

6 (6 16 26 126 36 136,不必输出具体方案)


#include<iostream>
#include<algorithm>
using namespace std;

int n;
int dp[1000 + 1];
int main()
{
	while (cin >> n)
	{
		dp[1]=1;
		for (int i = 2; i <= n; i++)
		{
			dp[i] = dp[i - 1];
			if (i % 2 == 0)
				dp[i] += dp[i/2];
		}
		printf("%d\n", dp[n]);
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/CJ_035/article/details/79757394