1 条题解

  • 0
    @ 2026-4-5 16:20:01
    #include<bits/stdc++.h>
    using namespace std;
    
    #define ll long long
    const int mod = 1e9 + 7;
    
    int n, k;
    
    int main() {
        cin >> n >> k;  //n个空位,至少隔开k个空位
    
        vector<ll> dp(n + 5, 0);   //dp[i]表示前i个位置合法的放置方案数
        dp[0] = 1;              //初始化空方案为1种
    
        for (int i = 1; i <= n; i++)
        {//枚举n个位置,在i位置放油桶有两种选择
            dp[i] = dp[i - 1]; //第i个位置不放油桶则就是i-1位置的方案数
    
            //放油桶情况,分为前面位置能否放置油桶:
            //能放油桶,则前i-k-1个位置的仍以合法方案都可以放置油桶,加上该方案数
            if (i - k - 1 >= 1)dp[i] = (dp[i] + dp[i - k - 1]) % mod;
            //不满足前面位置能放油桶,则只在该位置放置油桶
            else dp[i] = (dp[i - 1] + 1) % mod;
    
        }
    
        cout << dp[n];
    
    
        return 0;
    }
    
    • 1

    信息

    ID
    466
    时间
    1000ms
    内存
    256MiB
    难度
    6
    标签
    递交数
    81
    已通过
    24
    上传者