1. 程式人生 > 實用技巧 >洛谷-P2437 蜜蜂路線

洛谷-P2437 蜜蜂路線

洛谷-P2437 蜜蜂路線

原題連結:https://www.luogu.com.cn/problem/P2437


題目描述

一隻蜜蜂在下圖所示的數字蜂房上爬動,已知它只能從標號小的蜂房爬到標號大的相鄰蜂房,現在問你:蜜蜂從蜂房 \(m\) 開始爬到蜂房 \(n\)\(m<n\),有多少種爬行路線?(備註:題面有誤,右上角應為 \(n-1\)

輸入格式

輸入 \(m,n\) 的值

輸出格式

爬行有多少種路線

輸入輸出樣例

輸入 #1

1 14

輸出 #1

377

說明/提示

對於100%的資料,\(M,N\le 1000\)

C++程式碼

#include <iostream>
#include <cstring>
using namespace std;

string add(string x, string y) {
    int lenx = x.size();
    int leny = y.size();
    if (lenx > leny)
        for (int i=0; i<lenx-leny; ++i)
            y = '0' + y;
    else
        for (int i=0; i<leny-lenx; ++i)
            x = '0' + x;
    int jw = 0;
    for (int i=max(lenx, leny)-1; i>=0; --i) {
        x[i] += (y[i] - '0') + jw;
        jw = (x[i] - '0') / 10;
        x[i] = (x[i] - '0') % 10 + '0';
    }
    if (jw != 0)
        x = char(jw + '0') + x;
    return x;
}

int main() {
    int m, n;
    cin >> m >> n;
    string a[n+1];
    a[m] = a[m+1] = "1";
    for (int i=m+2; i<=n; ++i)
        a[i] = add(a[i-1], a[i-2]);
    cout << a[n] << endl;
    return 0;
}