玄关

P1064 [NOIP2006 提高组] 金明的预算方案

SpringNeverDie @ 2024-12-10 21:06:05

#include<bits/stdc++.h>
using namespace std;

int n,m,ap[62][32100],v[62],p[62],mas[62];

int main(){
    cin >> n >> m;

    for(int i=1;i<=m;i++){
        cin >> v[i] >> p[i] >> mas[i];
    }

    for(int i=1;i<=m;i++){
        for(int j=1;j<=n;j++){
            ap[i][j]=max(ap[i][j],ap[i-1][j]);
            if(mas[i]){
                if(j-v[i]-v[mas[i]]>=0 && i>=2) ap[i][j]=max(ap[i][j],ap[i-2][j-v[i]-v[mas[i]]]+v[mas[i]]*p[mas[i]]+v[i]*p[i]);
            }else if(j-v[i]>=0){
                ap[i][j]=max(ap[i][j],ap[i-1][j-v[i]]+v[i]*p[i]);
            }
        }
    }

    cout << ap[m][n] <<endl;    
}

|