1 solutions

  • -1
    @ 2024-12-26 13:29:43
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e7+20;
    int f[N]; //f[i]表示走到第i个位置的经过的最少的石头的数目
    int w[N]; //w[i]=1表示i这个位置上有石头
    int main()
    {
        int L;
        int s,t,m;
        cin>>L>>s>>t>>m;
        for(int i=1;i<=m;i++)
        {
            int x;
            cin>>x;
            w[x]=1; //记录这个位置有石头
        }
        memset(f,0x3f,sizeof f);
        f[0]=0;
        for(int i=1;i<=L+t;i++) //枚举走到的点
        {
            for(int k=i-t;k<=i-s;k++) //可以从哪个位置过来
            {
                if(k>=0) //合法距离
                    f[i]=min(f[i],f[k]+w[i]);
            }
        }
        int res=100000;
        for(int i=L;i<=L+t;i++) //枚举跳过后跳到的位置
        {
            res=min(res,f[i]);
        }
        cout<<res;
        return 0;
    }
    
    • 1

    Information

    ID
    2117
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    5
    Tags
    # Submissions
    12
    Accepted
    4
    Uploaded By