题目

acwing1019. 庆功会

题解

二维

#include<iostream>
using namespace std;
const int M=6010,N=510;
int f[N][M];
int main(){
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        int v,w,s;
        cin>>v>>w>>s;
        for(int j=m;j>=0;j--){
            f[i][j]=f[i-1][j];
            for(int k=1;k<=s&&k*v<=j;k++){
                f[i][j]=max(f[i][j],f[i-1][j-k*v]+k*w);
            }
        }
    }
    cout<<f[n][m]<<endl;
    
    return 0;
}

一维

#include<iostream>
using namespace std;
const int M=6010;
int f[M];
int main(){
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        int v,w,s;
        cin>>v>>w>>s;
        for(int j=m;j>=0;j--){
            for(int k=1;k<=s&&k*v<=j;k++){
                f[j]=max(f[j],f[j-k*v]+k*w);
            }
        }
    }
    cout<<f[m]<<endl;
    
    return 0;
}