1. 程式人生 > >洛谷1192 神奇的動態規劃

洛谷1192 神奇的動態規劃

跟前一段做的一個題目很像,放上鍊接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;
}