zoukankan      html  css  js  c++  java
  • hdu-5686 Problem B(斐波那契数列)

    题目链接:

    Problem B

    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
     
    题意:
     
    思路:
     
    可以发现是一个斐波那契数列,可以这样考虑,当多加一个1时,加的这个1可以和前边的合并,这时是dp[i-2]种方案,不和前边合并是dp[i-1]种方案,所以dp[i]=dp[i-1]+dp[i-2];
    n太大,long long也不够用,所以就用数组模拟加法计算啦
     
    AC代码:
     
    //#include <bits/stdc++.h>
    #include <iostream>
    #include <queue>
    #include <cmath>
    #include <map>
    #include <cstring>
    #include <algorithm>
    #include <cstdio>
    using namespace std;
    #define Riep(n) for(int i=1;i<=n;i++)
    #define Riop(n) for(int i=0;i<n;i++)
    #define Rjep(n) for(int j=1;j<=n;j++)
    #define Rjop(n) for(int j=0;j<n;j++)
    #define mst(ss,b) memset(ss,b,sizeof(ss));
    typedef long long LL;
    const LL mod=1e9+7;
    const double PI=acos(-1.0);
    const int inf=0x3f3f3f3f;
    const int N=1e5+25;
    
    int n;
    LL dp[205];
    int str[205][202],dis[205];
    int fun()
    {
        mst(str,0);
        str[1][0]=1;
        str[2][0]=2;
        dis[1]=1;
        dis[2]=1;
        for(int i=3;i<202;i++)
        {
            for(int j=0;j<=200;j++)
            {
                str[i][j]+=str[i-1][j]+str[i-2][j];
               // str[i][j+1]+=(str[i-1][j]+str[i-2][j])/10;
            }
            for(int j=0;j<=200;j++)
            {
                str[i][j+1]+=str[i][j]/10;
                str[i][j]%=10;
            }
        }
    }
    int main()
    {
        fun();
        while(scanf("%d",&n)!=EOF)
        {
            for(int i=198;i>=0;i--)
            {
                if(str[n][i]!=0)
                {
                    for(int j=i;j>=0;j--)printf("%d",str[n][j]);
                    break;
                }
            }
            printf("
    ");
        }
    
        return 0;
    }
  • 相关阅读:
    easyui Combobox用法
    Jquery EasyUI treegrid的使用(asp.net后台)
    异步加载Echars +ASP.Net后台(柱状图)
    jQuery Validate表单验证帐号是否存在
    EasyUI Datebox 日期验证 开始日期小于结束时间
    gdb调试常用命令
    简答哈希实现 (nyoj 138 找球号2)
    03_汇编语言(n个数找最大值)
    02_汇编语言(子程序设计01_基本输入输出函数模板)
    01_汇编语言(基本格式_模板)
  • 原文地址:https://www.cnblogs.com/zhangchengc919/p/5538681.html
Copyright © 2011-2022 走看看