原题:http://acm.hdu.edu.cn/showproblem.php?pid=5686
当我们要求f[n]时,可以考虑为前n-1个1的情况有加了一个1。
此时有两种情况:当不适用第n个1进行合并时,就有f[n-1]个序列;当使用这个1进行合并时,就有f[n-2]个序列。所以f[n] = f[n-1]+f[n-2]。
因为这道题数会很大,所以可以用Java做大数运算。
1 import java.math.BigInteger; 2 import java.util.Scanner; 3 4 public class Main { 5 6 public static void main(String[] args) { 7 8 Scanner sc=new Scanner(System.in); 9 BigInteger f []=new BigInteger[205]; 10 f[1]=new BigInteger("1"); 11 f[2]=new BigInteger("2"); 12 for(int i=3;i<=200;i++){ 13 f[i]=f[i-2].add(f[i-1]); 14 } 15 while(sc.hasNext()){ 16 int n=sc.nextInt(); 17 System.out.println(f[n]); 18 } 19 } 20 }