首页 > 其他 > 详细

1011 数的计算

时间:2016-07-01 18:14:07      阅读:246      评论:0      收藏:0      [点我收藏+]

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

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

1.          不作任何处理;

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

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

简单的递推dp[n]=dp[n/2]+…+dp[1]+n/2(因为每加一个就多一个,一共加了n/2个);

所以代码如下

技术分享
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef double db;
#define X first
#define Y second
#define mp(a,b) make_pair(a,b)
#define pb push_back
#define sd(x) scanf("%d",&(x))
#define Pi acos(-1.0)
#define sf(x) scanf("%lf",&(x))
#define ss(x) scanf("%s",(x))
#define maxn 50005
const int inf=0x3f3f3f3f;
const ll mod=1000000007;
int dp[1005];
int main()
{
    #ifdef local
    freopen("in","r",stdin);
    //freopen("out","w",stdout);
    int _time=clock();
    #endif
    for(int i=1;i<=1000;i++)
    {
        for(int j=1;j<=i/2;j++)
        {
            dp[i]+=dp[j]+1;
        }
    }
    int n;
    cin>>n;
    cout<<dp[n]+1<<endl;
    #ifdef local
    printf("time: %d\n",int(clock()-_time));
    #endif
}
View Code

 

1011 数的计算

原文:http://www.cnblogs.com/scau-zk/p/5633846.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!