天天看點

Problem B 2016

Problem B

Problem Description

度熊面前有一個全是由1構成的字元串,被稱為全1序列。你可以合并任意相鄰的兩個1,進而形成一個新的序列。對于給定的一個全1序列,請計算根據以上方法,可以構成多少種不同的序列。

Input

這裡包括多組測試資料,每組測試資料包含一個正整數,代表全1序列的長度。

Output

對于每組測試資料,輸出一個整數,代表由題目中所給定的全1序列所能形成的新序列的數量。

Sample Input

1
3
5      

Sample Output

Copy

1
3
8      

Hint

​​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

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]);
        }
    }

}