Problem B
Accepts: 2037
Submissions: 7572
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)
看到这种题 只有两种想法 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]);
}
}
}