现在的位置: 首页 > 综合 > 正文

hdu1041 Computer Transformation 看题目不能理解,英语太差了….

2013年03月26日 ⁄ 综合 ⁄ 共 538字 ⁄ 字号 评论关闭

 简单大数,不过公式可能有些难推,先给出我的公式 dp[i] = dp[i-1] + dp[i-2]*2

①:01

②:1001

③:0110 1001

④:1001 0110 0110 1001

⑤:0110 1001 1001 0110 1001 0110 0110 1001

可以发现把每一步分成两分,后一半肯定和上面的一样,所以+dp[i-1],前一半的一半和上两个一样,而后一半只不过是翻转了一下而已,贡献的0没变,所以+dp[i-2]*2..

#include<stdio.h>
int ds[1001][501];
int main()
{
    int n,i,j,jw,f;

    ds[0][0] = ds[1][0] = 0; ds[2][0] = ds[3][0] = 1;
    for(i=4;i<=1000;i++)
        for(jw=j=0;j<=500;j++)
        {
            ds[i][j] = ds[i-1][j] + ds[i-2][j]*2 + jw;
            jw = ds[i][j] / 10;
            ds[i][j] %= 10;
        }

    while(scanf("%d",&n)!=EOF)
    {
        if(n==1) printf("0");
        else
            for(f=j=500;j>=0;j--)
                if(ds[n][j] || !f)
                {
                    printf("%d",ds[n][j]);
                    f = 0;
                }
        puts("");
    }
}

抱歉!评论已关闭.