您的位置:首页 > 其它

HDU 1041 递推 大数

2011-08-01 22:32 260 查看
递推:0->10 ;

1->01;

00->1010;

10->0110;

01->1001;

11->0101;

假设a[i]表示第i 步时候的00的个数,由上面的可以看到,00是由01 得到的,所以只要知道a[i-1]的01的个数就能够知道a[i]的00的个数了,那a[i-1]怎么求呢,同样看推导,01由1和00 得到,而第i步1的个数是2^(i-1),所以a[i]=2^(i-3)+a[i-2];

大数的话用java比较方便,用C++效率高点

import java.io.*;
import
java.math.*;
import
java.util.*;
public class
Main
{

public static
void main(String[] args)
{

int
N;
BigInteger
[]a=new BigInteger[1001];
a[1]=new BigInteger("0");
a[2]=new BigInteger("1");
a[3]=new BigInteger("1");
for
(int i=4;i<=1000;i++)
{

a[i]=BigInteger.valueOf(2).pow(i-3).add(a[i-2]);
}

Scanner
cin=new Scanner(System.in);
while
(cin.hasNext())
{

N=cin.nextInt();
System
.out.println(a[N].toString());
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: