tyh0929 @ 2024-06-22 10:52:26
哪里错了??
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define db double
#define itn int
#define fro for
#define scnaf scanf
#define snacf scanf
#define prinf printf
int n,m;
struct asd{
int v;
int w;
int q;
int s;
int k[11];
int id;
}a[71];
int dp[32001];
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
// freopen(".in","r",stdin);
// feropen(".out","w",stdout);
scanf("%d%d",&m,&n);
for(int i=1;i<=n;i++){
scanf("%d%d%d",&a[i].v,&a[i].w,&a[i].q);
a[i].id=i;
a[a[i].q].s++;
a[a[i].q].k[a[a[i].q].s]=a[i].id;
a[i].v*=a[i].w;
}
for(int i=1;i<=n;i++){
if(a[i].q!=0){
continue;
}
for(int j=m;j>=a[i].v;j--){
if(j>=a[i].v){
dp[j]=max(dp[j],dp[j-a[i].v]+a[i].v);
}
if(j>=a[i].v+a[a[i].k[1]].v&&a[i].s>=1){
dp[j]=max(dp[j],dp[j-a[i].v-a[a[i].k[1]].v]+a[i].v+a[a[i].k[1]].v);
}
if(j>=a[i].v+a[a[i].k[2]].v&&a[i].s>=1){
dp[j]=max(dp[j],dp[j-a[i].v-a[a[i].k[2]].v]+a[i].v+a[a[i].k[2]].v);
}
if(j>=a[i].v+a[a[i].k[1]].v+a[a[i].k[2]].v&&a[i].s==2){
dp[j]=max(dp[j],dp[j-a[i].v-a[a[i].k[1]].v-a[a[i].k[2]].v]+a[i].v+a[a[i].k[1]].v+a[a[i].k[2]].v);
}
}
}
printf("%d",dp[m]);
return 0;
}
/*
*/