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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

P1192 台阶问题(递推)

發布時間:2024/9/3 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P1192 台阶问题(递推) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

https://www.luogu.org/problemnew/show/P1192
題目描述
有N級的臺階,你一開始在底部,每次可以向上邁最多K級臺階(最少11級),問到達第N級臺階有多少種不同方式。

輸入輸出格式
輸入格式:
兩個正整數N,K。

輸出格式:
一個正整數,為不同方式數,由于答案可能很大,你需要輸出ans mod 100003后的結果。

輸入輸出樣例
輸入樣例#1:
5 2
輸出樣例#1:
8
Ac_code:
way1:

/* 根據最直接規律:f(n) = f(n-1)+f(n-2)+...f(n-k), 直接模擬 */ #include <stdio.h> #define mod 100003 int a[100005]; int main() {int n,k;a[0] = a[1] = 1;scanf("%d%d",&n,&k);for(int i = 2; i <= n; i++){for(int j = 1; i-j>=0&&j<=k; j++){a[i] += a[i-j];a[i] %= mod;}}printf("%d\n",a[n]);return 0; }

way2:

/* 進一步找規律,效率明顯提高: 1. n<= k: f(n+1)=f(n)*2; 2. n > k: f(n+1) = f(n)*2 - f(n-k); */ #include <stdio.h> #define mod 100003 int a[100005]; int main() {int n,k;a[0] = a[1] = 1;scanf("%d%d",&n,&k);for(int i = 2; i <= k; i++)//或者只用這層循環a[i]=2*a[i-1]{for(int j = 1;i-j>=0&&j<=k; j++){a[i] += a[i-j];a[i] %= mod;}//a[i] = 2*a[i-1]%mod;}for(int i = k+1; i <= n; i++){a[i] = (2*(a[i-1])%mod-a[i-1-k]%mod+mod)%mod;}printf("%d\n",a[n]);return 0; }

way3:

/* 看了一下別人的題解,說可以記憶化爆搜。 但是n=100000時,沒有輸出,提交居然AC,這題數據太水! */ #include <stdio.h> #define mod 100003 int a[100005],k; int Find(int x) {if(a[x])return a[x];int sum = 0;for(int i = 1; x-i>=0&&i<=k; i++){sum = (sum + Find(x-i)) % mod;}a[x] = sum;return sum; } int main() {int n;a[0] = a[1] = 1;scanf("%d%d",&n,&k);printf("%d\n",Find(n));return 0; }

總結

以上是生活随笔為你收集整理的P1192 台阶问题(递推)的全部內容,希望文章能夠幫你解決所遇到的問題。

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