CodeForces-431C k-Tree

感觉这个题的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;
}
```c++
posted @ 2024-08-24 10:53  z-zhi  阅读(14)  评论(0)    收藏  举报