2 solutions

  • 1
    @ 2026-2-28 20:04:06

    动态规划

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e4+10,M=110;
    int a[M],b[N],f[N];//f[i]表示走到第i关时分数的最大值。
    int main()
    {
        int n,m;
        cin>>n>>m;
        for(int i=0;i<m;i++)
        {
            cin>>a[i];
        }
        for(int i=0;i<n;i++)
        {
            cin>>b[i];
        }
        memset(f,-0x3f,sizeof f);
        f[0]=0;
        for(int i=0;i<n;i++)
        {
            if(f[i]==-0x3f3f3f3f)
            {
                continue;
            }
            for(int j=0;j<m;j++)
            {
                int x=i+a[j];
                if(x>=n)
                {
                    f[n]=max(f[n],f[i]+b[i]);
                    continue;
                }
                f[x]=max(f[x],f[i]+b[i]);
            }
        }
        cout<<f[n];
        return 0;
    }
    

    Information

    ID
    2540
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    5
    Tags
    (None)
    # Submissions
    35
    Accepted
    3
    Uploaded By