动态规划

#include <climits>
#include <iostream>
#include <vector>
using namespace std;

int main() {
    int l,s,t,m, i, j;
    cin>>l>>s>>t>>m;
    int stone[l+1];
    for(i = 0;i<l;i++)
    {
        stone[i] = 0;
    }
    for(i = 0;i<m;i++)
    {
        cin>>j;
        stone[j] = 1;
    }
    vector<int> dp(l+s,INT_MAX);
    dp[0] = 0;
    for(i = s;i<l+s;i++)
    {
        for(j = s;j<=t;j++)
        {
            int prev_step = i-j;
            if(prev_step >= 0 && dp[prev_step] != INT_MAX)
            {
                dp[i] = min(dp[i],dp[prev_step]+stone[i]);
            }
        }
    }
    int res = 100;
    for(i = l;i<l+s;i++)
    {
        res = min(res, dp[i]);
    }
    cout<<res;
    return 0;
}