【问题描述】数的计数(people.cpp/c/pas) NOIP2001
“修罗王的召唤听见了听见了,黑暗军团的勇士们咆哮了咆哮了,看神国的圣殿动摇了动摇了,我仰天大笑是我们进攻的时候了,哈哈哈哈哈哈……”当漫山遍野响起黑暗军团的战歌时,郁闷的邪狼却在一遍遍地反复计算黑暗军团的总人数。
计算方法是这样的,输入一个自然数n(n≤1000),然后对此自然数按照如下方法进行处理:
(1)不做任何处理;
(2)在它的左边加上一个自然数,但该自然数不能超过原数的一半;
(3)加上数后,继续按此规则进行处理,直到不能再加自然数为止。
则具备上面性质的数的个数(包含输入的自然数n)即是黑暗军团的人数。
【输入格式】
一个自然数n。
【输出格式】
扫描二维码关注公众号,回复:
2868228 查看本文章
输出数的个数。
【输入样例】
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;
}