Problem B
Accepts: 2037
Submissions: 7572
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
Copy
1 3 8 Hint 如果序列是:(111)。可以构造出如下三个新序列:(111), (21), (12)。
Statistic | Submit | Clarifications | Back
看到这种题 只有两种想法 DP 递推。。
仔细观察菲波那切数列 至于怎么观察的
如果当前有n个1 我们应该怎么得到f[n]呢
我们可以认为有(n-1)个1后面再添加一个1得到 这个时候又分两种情况了
1.不使用我们添加的这个1 总个数f[n-1]
2.使用我们添加的这个1 总个数f[n-2]
如果说错了 请告诉我。。。
又因为N很大 (long long 好像存50多吧) 所以有两个选择 1 java大数 2.c模拟加法
我用的1
AC代码:
import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc=new Scanner(System.in); BigInteger f []=new BigInteger[205]; f[1]=new BigInteger("1"); f[2]=new BigInteger("2"); for(int i=3;i<=200;i++){ f[i]=f[i-2].add(f[i-1]); } while(sc.hasNext()){ int n=sc.nextInt(); System.out.println(f[n]); } } }
时间: 2024-10-08 08:01:09