➤ Problem Link : 431C. k
✅ C++ Solution :
#include<bits/stdc++.h> using namespace std; #define ll long long int #define m 1000000007 int n,k,d; ll dp[2][200]; ll func(bool taken, int s) { if(!taken && n-s < d) return 0; if(s>=n) { if(s>n) return 0; if(s==n && taken) return 1; return 0; } ll sum=0; for(int i=1;i<=k;i++) { if(i<d) { if(dp[taken][s+i]==-1) sum=(sum+func(taken,s+i)%m)%m; else sum=(sum+dp[taken][s+i])%m; } else { if(dp[1][s+i]==-1) sum=(sum+func(1,s+i)%m)%m; else sum=(sum+dp[1][s+i])%m; } } return dp[taken][s]=sum; } int main() { for(int i=0;i<200;i++) dp[0][i]=dp[1][i]=-1; cin>>n>>k>>d; cout<<func(0,0); }
Thank you for your patience reading. If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Whatsapp or Facebook.
😇Happy Learning!!