日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

信息学奥赛一本通 1190:上台阶 | OpenJudge NOI 2.3 3525:上台阶

發布時間:2025/3/17 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 信息学奥赛一本通 1190:上台阶 | OpenJudge NOI 2.3 3525:上台阶 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【題目鏈接】

ybt 1190:上臺階
OpenJudge NOI 2.3 3525:上臺階
注:ybt 1190最大數據數量為71,而OpenJudge 2.3 3525中最大數據數量為100。如果把數組a設為int,在OpenJuge中能過,但在ybt中不能過。

【題目考點】

1. 遞推

2. 記憶化遞歸

【解題思路】

1. 遞推

  • 遞推狀態:aia_iai?:到第i階臺階的走法
  • 初始狀態:
    到第1個臺階有1種走法:a1=1a_1 = 1a1?=1
    到第2個臺階可以走兩步每次走1階,或一步跨2階,有2種走法:a2=2a_2 = 2a2?=2
    到第3個臺階,可以走3步每次走1階,可以走一步1階一步2階,或一步2階一步1階,或一步3階,共4種走法:a3=4a_3 = 4a3?=4
  • 遞推關系:
    思考要想到走第i個臺階,前一步是在第幾個臺階。
    可以是從第i-1個臺階走1階,到第i個臺階。到第i-1個臺階的走法為ai?1a_{i-1}ai?1?種,那么這種走法的種類數量為ai?1a_{i-1}ai?1?
    可以是從第i-2個臺階一步走2階,到第i個臺階。這種走法的種類數量為ai?2a_{i-2}ai?2?
    可以是從第i-3個臺階一步走3階,到第i個臺階。這種走法的種類數量為ai?3a_{i-3}ai?3?
    所以走到第i個臺階的總走法數量為:ai=ai?1+ai?2+ai?3a_i = a_{i-1}+a_{i-2}+a_{i-3}ai?=ai?1?+ai?2?+ai?3?

該題有多次詢問,可以先通過遞推求出a1~a100a_1\sim a_{100}a1?a100?,再根據輸入的序號在數組中取值。
注意:數組a的類型要設為long long

【題解代碼】

解法1:遞推

#include <bits/stdc++.h> using namespace std; int main() {long long a[105];int x;a[1] = 1, a[2] = 2, a[3] = 4;for(int i = 4; i <= 100; ++i)a[i] = a[i-1] + a[i-2] + a[i-3];while(cin >> x && x != 0)cout << a[x] << endl;return 0; }

解法2:記憶化遞歸

#include <bits/stdc++.h> using namespace std; long long a[105]; long long solve(int x)//上x階臺階的走法數量 {if(a[x] > 0)return a[x];if(x == 1)return 1;else if(x == 2)return 2;else if(x == 3)return 4;elsereturn a[x] = solve(x-1) + solve(x-2) + solve(x-3); } int main() {int x;while(cin >> x && x != 0)cout << solve(x) << endl;return 0; }

總結

以上是生活随笔為你收集整理的信息学奥赛一本通 1190:上台阶 | OpenJudge NOI 2.3 3525:上台阶的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。