洛谷1192 神奇的動態規劃
阿新 • • 發佈:2018-12-04
跟前一段做的一個題目很像,放上鍊接https://blog.csdn.net/qq_41755258/article/details/84719612
思路:狀態轉移方程,就是對於當前的臺階數i來說,它可以由之前的狀態轉移過來,最後一步有k鍾情況,假設k=2。比如說對於臺階數為i-1,那麼再走一步,就可以直接到達現在的狀態。對於臺階數為i-2的狀態,那麼再直接跨兩步就可以直接到達當前的狀態。
總結:我覺得這樣找狀態轉移方程是不錯的方法,從某一種情況來看,看看它是由前一步的哪些情況再加上最後一步轉換來的。
for(int j=1;j<=k;j++) if(i>=j) dp[i]+=dp[i-j]%mod;
#include <bits/stdc++.h> using namespace std; const int maxn=100005; const int mod=100003; int dp[maxn]; int main() { int n,k; cin>>n>>k; dp[0]=1,dp[1]=1; for(int i=2;i<=n;i++){ for(int j=1;j<=k;j++){ if(i>=j) dp[i]+=dp[i-j]%mod; } } cout<<dp[n]%mod<<endl; return 0; }