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

来源:互联网 发布:网络电视如何使用 编辑:程序博客网 时间:2024/05/16 10:43

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

135
Sample Output

138
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");      elseprintf("%I64d\n",dp[n]);     }return 0;}//java版本:ACimport 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]);        }    }}





1 0
原创粉丝点击