Problem B Accepts: 1273 Submissions: 4873 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Description 度熊面前有一个全是由1构成的字符串,被称为全1序列。你可以合并任意相邻的两个1,从而形成一个新的序列。对于给定的一个全1序列,请计算根据以上方法,可以构成多少种不同的序列。 Input 这里包括多组测试数据,每组测试数据包含一个正整数NN,代表全1序列的长度。 1\leq N \leq 2001≤N≤200 Output 对于每组测试数据,输出一个整数,代表由题目中所给定的全1序列所能形成的新序列的数量。 Sample Input 1 3 5 Sample Output 1 3 8 Hint 如果序列是:(111)。可以构造出如下三个新序列:(111), (21), (12)。 本题主要是递推题 sn=1 --- nn=1 sn=2 --- nn=2 sn=3 --- nn=3 sn=4 --- nn=5 sn=5 --- nn=8 .... 由上述序列 我们不难发现这是一个费不拉切数列 dp[i]=dp[i-1]+dp[i-2] 但是题中给的数据量为200 200在费不拉数列中已经是一个相当大的值了 所以采用java大数类进行处理 不要忘记main函数外面打表 避免超时问题 AC代码如下 import java.util.Scanner; import java.math.BigInteger; public class Main { public static BigInteger[]dp=new BigInteger[205]; public static void main(String[] args) { // TODO Auto-generated method stub Scanner cin=new Scanner(System.in); Init(); while(cin.hasNext()) { int n=cin.nextInt(); if(n>=1&&n<=200) { System.out.print(dp[n]); } System.out.println(); } } public static void Init() { dp[1]=new BigInteger("1"); dp[2]=new BigInteger("2"); for(int i=3;i<=201;i++) { dp[i]=dp[i-1].add(dp[i-2]); } } }