遞推 上下車問題

2021-10-14 16:31:44 字數 1388 閱讀 7980

​ 火車從始發站(稱為第1站)開出,在始發站上車的人數為a,然後到達第2站,在第2站有人上、下車,但上、下車的人數相同,因此在第2站開出時(即在到達第3站之前)車上的人數保持為a人。從第3站起(包括第3站)上、下車的人數有一定規律:上車的人數都是前兩站上車人數之和,而下車人數等於上一站上車人數,一直到終點站的前一站(第n-1站),都滿足此規律。

現給出的條件是:共有n個車站,始發站上車的人數為a,最後一站下車的人數是m(全部下車)。試問x站開出時車上的人數是多少?

​ 若無解則輸出「no answer.」

包含多組測試資料,每組測試資料佔一行,包括a,n,m和x四個數,其中0<=a,m<=100000每組測試資料佔一行,輸出乙個數x,即站開出時車上的人數。

1 6 7 3

5 7 32 4

2

13

本質其實就是斐波那契數列,由於每次上下車人數的計算方式不同,我選擇開兩個陣列stops_up和stops_down,前者用來存上車人數,後者用來存下車人數;

上車人數的遞推式為stops_up[j] = stops_up[j - 1] + stops_up[j - 2];

下車人數的遞推式為stops_down[j] = stops_up[j-1];

由於這道題是只知道最後的下車人數但是不知道第二次的上下車人數,我決定用暴力乙個個搜,即把每一種第二次上車人數的情況都給列舉出來,然後把第n-1站的人數與m比對(第m站是所有人都下車,所以m == 第n-1站開出時車上的人數),如果相等則輸出第x站開出時車上人數,否則無解;

下面是**:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define max 10001

#define ll long long int

#define scf(a) scanf("%d", &a)

#define mms(a) memset(a, 0, sizeof(a))

using

namespace std;

int start, n, m, x;

int stops_up[max]

, stops_down[max]

;int

main()

if(summ == m)}if

(!judge)

cout <<

"no answer."

<< endl;

}return0;

}

基礎動態規劃題 火車站(上車下車) 遞推

時間限制 1 sec 記憶體限制 128 mb 提交 13 解決 7 提交 狀態 討論版 火車從始發站 稱為第1站 開出,在始發站上車的人數為a,然後到達第2站,在第2站有人上 下車,但上 下車的人數相同,因此在第2站開出時 即在到達第3站之前 車上的人數保持為a人。從第3站起 包括第3站 上 下車...

統計問題 遞推

題目的解法 設ans n 為走n步的所有不同走法 up n 為第n步是向上時的所有不同走法 left n 為第n步是向左時的所有不同走法 right n 為第n步是向右時的所有不同走法。則有以下遞推關係 up n up n 1 left n 1 right n 1 left n up n 1 lef...

未來超速列車概念 上下車無需停站

摘要 一位物理學家演示了簡單改變乘客搭乘飛機的方式就能夠將登機時間減半。一種研發中的超音速客機能夠將倫敦到雪梨的旅行縮短到4小時。隨著超音速客機概念的誕生,超速列車也成了人類未來的發展。spacex 和特拉斯汽車公司的總裁elon musk提出的超迴路列車,它設想能夠在30分鐘內將乘客從舊金山送達洛...