hiho一下 第113周 Fibonacci (dp)

原创 2016年08月29日 15:38:28

分析:

dp[i][j]表示前i个数,以第j个斐波那契数为结尾的前缀子序列有多少个。转移好想。
这里主要是在105范围以内,斐波那契数只有25个,可以加维度dp。

 #include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>

using namespace std;
#define pr(x) cout << #x << ": " << x << "  " 
#define pl(x) cout << #x << ": " << x << endl;
typedef long long ll;

struct jibancanyang
{
    int rnk[112345], n, A[1123456];
    ll dp[1123456][26], mod = int(1e9) + 7;


    void pre() {
        memset(rnk, 0, sizeof(rnk));
        int a = 1, b = 1, cnt = 1;
        while (b <= 100000) {
            rnk[b] = cnt++;
            int t = a;
            a = b;
            b = t + b;
        }
    }

    void fun() {
        pre();
        scanf("%d", &n);
        for (int i = 1; i <= n; ++i) scanf("%d", &A[i]);
        memset(dp, 0, sizeof(dp));
        for (int i = 1; i <= n; ++i) {
            int r = rnk[A[i]];
            for (int j = 0; j <= 25; ++j) {
                dp[i][j] = dp[i - 1][j];
                if (j == r) {
                    if (r != 1)
                        dp[i][j] += dp[i - 1][j - 1];
                    else {
                        dp[i][0]++;
                        dp[i][j] += dp[i - 1][0];
                    }
                }
                dp[i][j] %= mod;
            }
        }
        ll ans = 0;
        for (int i = 0; i <= 25; ++i) {
            ans = (ans + dp[n][i]) % mod;
        }
        printf("%lld\n", ans);
    }

}ac;

int main()
{
#ifdef LOCAL
    freopen("in.txt", "r", stdin);
    //freopen("out.txt", "w", stdout);
#endif
    ac.fun();
    return 0;
}
版权声明:本文为博主原创文章,转载请注明作者:jibancanyang。

hiho一下 第124周 查找附近POI- 四叉树

题解说用四叉树,没分析复杂度: 恩。四叉树: 以下代码跑得比部分四叉树代码还快 #include using namespace std; struct point{ int x; int...
  • viphong
  • viphong
  • 2016年11月24日 14:51
  • 318

hiho一下 第124周 #1421 : 四叉树 【二维线段树】

#1421 : 四叉树 时间限制:20000ms 单点时限:2000ms 内存限制:256MB 描述 小Ho:下个周末我们打算去隔壁城市玩吧? ...
  • leibniz_zhang
  • leibniz_zhang
  • 2016年11月20日 20:50
  • 681

动态规划入门之求解斐波那契数列

动态规划入门之求解斐波那契数列斐波那契数列,除了可以用跟递归方法来处理,还可以使用动态规划方法(DP)来求解。区别在于,如果使用动态规划方法,中间结果要“缓存”起来,以备后续使用,就可以将时间复杂度优...
  • yanglr2010
  • yanglr2010
  • 2016年10月17日 20:18
  • 823

简单计算器 hiho一下第169周

简单计算器 hiho一下第169周
  • l_mark
  • l_mark
  • 2017年09月26日 20:28
  • 49

hihocoder 第113周 Fibonacci(动态规划)

题目大意:给定一个数字序列,求该序列的所有子序列中有多少是斐波拉契数列的前缀,即满足"1 1 2 3 ..."的形式。 解题思路:首先注意ai的范围,首先可以肯定斐波拉切数列不会太多,最多25个...
  • hexianhao
  • hexianhao
  • 2016年09月01日 08:41
  • 230

hiho一下 第139周

题目1 : 买零食 传送门 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho很喜欢在课间去小卖部买零食。然而不幸的是...
  • liyuanshuo_nuc
  • liyuanshuo_nuc
  • 2017年03月15日 21:23
  • 116

hiho一下 第141周

题目1 : 自行车架 传送门 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi的宿舍楼下有一块用于停自行车的区域。平...
  • liyuanshuo_nuc
  • liyuanshuo_nuc
  • 2017年03月12日 12:15
  • 113

hiho一下 第145周

题目1 : 智力竞赛 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi、小Ho还有被小Hi强拉来的小Z,准备组队参加...
  • liyuanshuo_nuc
  • liyuanshuo_nuc
  • 2017年04月11日 17:08
  • 157

hiho一下 第184周--满减优惠

时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 最近天气炎热,小Ho天天宅在家里叫外卖。他常吃的一家餐馆一共有N道菜品,价格分别是A1, ...
  • zhengxiangmaomao
  • zhengxiangmaomao
  • 2018年01月07日 12:41
  • 90

递归实现求Fibonacci数列的第n项

#include #include #include #include using namespace std; int jich (int x); int main() { int n; ...
  • qq_29486343
  • qq_29486343
  • 2015年07月25日 21:52
  • 777
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hiho一下 第113周 Fibonacci (dp)
举报原因:
原因补充:

(最多只允许输入30个字)