感觉这个题的dp还是有点思维的,可能就是我现在能做到的题目的天花板级别的了,dp还是要点灵感感觉,以下是代码,可能要写题解要过好久,先水着
include<bits/stdc++.h>
define int long long
define endl '\n'
using namespace std;
const int mod=1000000007;
int n,k,d;
int dp[200][2]={0};
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>n>>k>>d;
dp[1][0]=0;
dp[0][0]=1;
for(int i=1;i<=n;++i){
for(int j=1;j<=min(d-1,i);++j){
dp[i][0]+=dp[i-j][0];
dp[i][0]%=mod;
}
// cout<<"i 0"<<" "<<i<<" "<<dp[i][0]<<endl;
}
// dp[d][1]=1;
for(int i=d;i<=n;++i){
for(int j=1;j<=min(k,i);++j){
dp[i][1]+=dp[i-j][1];
dp[i][1]%=mod;
}
for(int j=d;j<=min(i,k);++j){
dp[i][1]+=dp[i-j][0];
dp[i][1]%=mod;
}
// cout<<"i 1"<<" "<<i<<" "<<dp[i][1]<<endl;
}
int ans=dp[n][1];
cout<<ans<<endl;
return 0;
}