心如止水
Je n'ai pas le temps
posts - 400,comments - 130,trackbacks - 0
简单的递推,d[i]=d[i-1]+d[i-1]+d[i-2]+d[i-3]。数据规模很大,需要使用高精度。
以下是我的代码:
#include<iostream>
#include
<stdio.h>
#include
<string.h>
#define maxn 1007
#define maxl 90
using namespace std;

typedef 
struct
{
    
long l,s[maxl];
}bign;
void Add(bign &c,bign &a,bign &b)
{
    memset(
&c,0,sizeof(c));
    c.l
=(a.l>b.l?a.l:b.l);
    
for(long i=0;i<c.l;i++)
    {
       c.s[i]
+=a.s[i]+b.s[i];
       
if(c.s[i]>=100000)
       {
          c.s[i]
-=100000;
          c.s[i
+1]++;
       }
    }
    
if(c.s[c.l]) c.l++;
}
void Print(bign &a)
{
    printf(
"%ld",a.s[a.l-1]);
    
for(long i=a.l-2;i>=0;i--)
      printf(
"%05ld",a.s[i]);
}

long n;
bign d[maxn]
={{1,{1}},{1,{2}},{1,{5}},{1,{13}}};

int main()
{
    
for(long i=4;i<=1000;i++)
    {
       
//  d[i]=d[i-1]+d[i-1]+d[i-2]+d[i-3]
       bign t1,t2;
       Add(t1,d[i
-1],d[i-1]);
       Add(t2,t1,d[i
-2]);
       Add(d[i],t2,d[i
-3]);
    }
    
    
while(cin>>n)
    {
       Print(d[n]);
       cout
<<endl;
    }
return 0;
}
posted on 2010-11-12 23:17 lee1r 阅读(732) 评论(0)  编辑 收藏 引用 所属分类: 题目分类:递推/递归

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理