zoukankan      html  css  js  c++  java
  • P2437 蜜蜂路线题解

    题目传递门

    思路分析:

    1、以普通的第(i)个蜂房进行思考,将它的状态描述为:(f[i]),这是一个一维数组。它可以由哪些状态转移过来?由题意,可以从(i-1),(i-2)而来。
    根据加法原理有(f[i]=f[i-1]+f[i-2]),其中(i>2),而(f[1]=f[2]=1)
    这就是一个斐波那契数列啊!

    2、看一下数据量,(M<=N<=1000),我们知道,(1000)极限值的斐波那契数列可不是一个小数字,(int)肯定暴掉,(long long)也是白费,(usinged long long)可以一试,根本还是高精度加法。

    c++ 代码

    #include <bits/stdc++.h>
    
    using namespace std;
    //高精度+裴波那契数列
    //本题目考点:
    //1、递推
    //2、递推关系式的推导:找出任意一个位置,思考它是怎么来的,再用加法原理。
    vector<int> add(vector<int> &A, vector<int> &B) {
        if (A.size() < B.size()) return add(B, A);
        vector<int> C;
        int t = 0;
        for (int i = 0; i < A.size(); i++) {
            t += A[i];
            if (i < B.size()) t += B[i];
            C.push_back(t % 10);
            t /= 10;
        }
        if (t) C.push_back(t);
        return C;
    }
    
    int main() {
        int m, n;
        cin >> m >> n;
        vector<int> A, B, C;
        A.push_back(1);
        B.push_back(1);
    
        for (int i = 3; i <= n - m + 1; i++) {
            C = add(A, B);
            //对加数需要重新赋值
            //A<---B
            A.assign(B.begin(), B.end());
            //B<---C
            B.assign(C.begin(), C.end());
        }
        //倒序输出结果
        for (int i = B.size() - 1; i >= 0; i--)printf("%d", B[i]);
    
        return 0;
    }
    
  • 相关阅读:
    [COCI2013]DLAKAVAC
    [TJOI2013]最长上升子序列
    AGC040E Prefix Suffix Addition
    AGC010E Rearranging
    AGC021F Trinity
    AGC002F Leftmost Ball
    JOISC2019D ふたつのアンテナ
    LOJ6210 「美团 CodeM 决赛」tree
    Luogu P3781 [SDOI2017]切树游戏
    Problem. M
  • 原文地址:https://www.cnblogs.com/littlehb/p/15026084.html
Copyright © 2011-2022 走看看