1234
turing_lisihan
2024-01-12 20:09:35
#include<bits/stdc++.h>
using namespace std;
struct node {
int v;
int w;
};
struct node2 {
int vv,pp,qq,num;
} y[65];
vector<node>h[100];
int dp[32005];
bool cmp(node2 a,node2 b) {
return a.qq<b.qq;
}
int main() {
int n,m,i,j,k;
int cnt=0;
cin >> n >> m;
for(i=1; i<=m; i++) {
cin >> y[i].vv >> y[i].pp >> y[i].qq;
y[i].num=i;
}
sort(y+1,y+m+1,cmp);
for(i=1; i<=m; i++) {
node x;
if(y[i].qq==0) {
x.v=y[i].vv;
x.w=y[i].vv*y[i].pp;
h[y[i].num].push_back(x);
} else {
int s=h[y[i].qq].size();
for(j=0; j<s; j++) {
x.v=y[i].vv+h[y[i].qq][j].v;
x.w=y[i].vv*y[i].pp+h[y[i].qq][j].w;
h[y[i].qq].push_back(x);
}
}
}
for(i=1; i<=m; i++) {
if(h[i].size()==0) continue;
for(j=n; j>=0; j--) {
for(k=0; k<h[i].size(); k++) {
if(h[i][k].v<=j) dp[j]=max(dp[j],dp[j-h[i][k].v]+h[i][k].w);
}
}
}
cout << dp[n];
return 0;
}