2016"百度之星" - 资格赛(Astar Round1)Problem B(斐波那契数列)

Problem B

Accepts: 1131
Submissions: 4378
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)
Problem Description

度熊面前有一个全是由1构成的字符串,被称为全1序列。你可以合并任意相邻的两个1,从而形成一个新的序列。对于给定的一个全1序列,请计算根据以上方法,可以构成多少种不同的序列。

Input

这里包括多组测试数据,每组测试数据包含一个正整数 N ,代表全1序列的长度。 1N200

Output

对于每组测试数据,输出一个整数,代表由题目中所给定的全1序列所能形成的新序列的数量。

Sample Input

1
3
5
Sample Output

1
3
8


     
     
     
     
Hint
如果序列是:(111)。可以构造出如下三个新序列:(111), (21), (12)。
题解:手动推一下,就是斐波那契数列。。。。注意n太大就要高精度。。。于是用了C++之后转了Java。。。、
AC代码:
/*
 WA的版本....
 n越大就超过——int64了....
 */
#include<iostream>
#include<memory.h>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<cstdlib>
#include<iomanip>
#include<vector>
#include<list>
#include<map>
#include<algorithm>
typedef long long LL;
using namespace std;
LL dp[210];
int main()
{
     int n;
     dp[1]=1;
     dp[2]=2;
     for(int i=3;i<=201;i++)
     {
     	dp[i]=dp[i-1]+dp[i-2];   
     }
     while(~scanf("%d",&n))
     {
     	if(n==0)printf("\n"); 
     	else
		printf("%I64d\n",dp[n]);
     }
	return 0;
}


//java版本: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) {     
        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();  //当n=0时,输出换行,坑啊
        }
        
        
    }
    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]);
        }
    }

}





你可能感兴趣的:(-,problem,百度之星,astar,B,资格赛,2016,Round1)