一开始试了一下深搜(第二段代码),不出所料TLE一大堆,只能过2两个点,后来改成递推(第一段代码),可以AC
#include<bits/stdc++.h>
using namespace std;
const int MAXN=100005;
const int MOD=100003;
int main()
{
int n,k;cin>>n>>k;
int step[MAXN]={};
step[0]=1;
for(int i=1;i<=n;i++){
for(int j=max(i-k,0);j<i;j++){//n-k~n-1所有方式之和等于step[n];
step[i]+=step[j];
step[i]%=MOD;
}
}
cout<<step[n]%MOD;return 0;
}
#include<bits/stdc++.h>
using namespace std;
int n,k;
int cnt=0;
void dfs(int nowstage){
if(nowstage==n){
cnt++;cnt=cnt%100003;return;
}else if(nowstage>n) return;
for(int i=1;i<=k;i++){
if(i+nowstage<=n){
dfs(nowstage+i);
}
}
}
int main()
{
cin>>n>>k;
dfs(0);
cout<<cnt%100003;
return 0;
}