P1028 数的计算( 记忆剪枝 )

题目描述

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

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

  1. 不作任何处理;

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

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

输入格式

个自然数 n (n1000)

输出格式

个整数,表示具有该性质数的个数。

输入输出样例

输入  
6
输出  
6

说明/提示

满足条件的数为

6,16,26,126,36,136

代码:

#include<cstdio>
int nums[1000]={0}; int num(int x){ if(x==0||x==1){ return 1; } if(nums[x]){ return nums[x]; } int n=x/2,sum=0; for(int i=0;i<=n;i++){ sum+=num(i); } return nums[x]=sum; } int main(){ int n;scanf("%d",&n); printf("%d",num(n)); }
posted @ 2020-01-15 20:37  狂奔的小学生  阅读(187)  评论(0编辑  收藏  举报