1 solutions

  • 0
    @ 2024-12-5 18:19:40

    C++ :

    #include<bits/stdc++.h>
    using namespace std;
    int a[101],b[20001]/*b 数组多开是因为在算 f 数组时的需要*/;
    int f[20001];//多算一点,算到 N+max{ai}=2N
    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];
        }
        for(int i=0;i<n+n;i++){
            f[i]=-1e9;//初始化为负无穷
        }
        f[0]=0;//记得 f[0] 要初始化为 0
        for(int j=0;j<n+n;j++){
            for(int i=0;i<m;i++){
                if(j>=a[i]){
                    f[j]=max(f[j],f[j-a[i]]+b[j-a[i]]);
                }
            }
        }
        int ans=-1e9;//答案变量也要初始化为负无穷
        for(int i=n;i<n+n;i++){
            ans=max(ans,f[i]);//注意不能直接输出 f[n] 或 f[n-1]
        }
        cout<<ans;
        return 0;
    }
    
    • 1

    Information

    ID
    9172
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By