是上台阶问题的翻版
设现在有n个1,对应结果为f(n)
如果左边第一个1保存,则对应结果为f(n-1)
如果左边两个1合并,则对应结果为f(n-2)
所以f(n) = f(n-1)+f(n-2)且f(1) = 1, f(2) = 2
所以为斐波那契数列
但是最多有200个1,如果直接用数组的话会爆掉的
因为斐波那契数列的增长性很接近2的阶乘
2的200阶乘必然会爆掉
懒得写大数了,直接用java搞的,发现很久不用又生疏了...
代码如下:
import java.io.*;
import java.math.BigInteger;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
BigInteger[] a = new BigInteger [220];
a[0] = a[1] = new BigInteger("1");
for(int i=2; i<=210; ++i) {
a[i] = a[i-1].add(a[i-2]);
}
int n;
String str;
n = scan.nextInt();
while(n != 0) {
n--;
str = scan.next();
System.out.println(a[str.length()]);
}
}
}