Knight_Master @ 2019-08-13 15:29:21
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
long long n,m;
long long s=0;
long v[70][5],p[70][5];
long g[70];
long f[61][40010]={0};
int main(){
cin>>n>>m;
for(long i=1;i<=m;i++){
g[i]=0;
}
for(long i=1;i<=m;i++)
{
long a,b,c;
cin>>a>>b>>c;
if(c==0) {
s++;
v[s][g[s]]=a;
p[s][g[s]]=b*a;
g[s]++;
continue;
}
if(c!=0){
v[c][g[c]]=a;
p[c][g[c]]=b*a;
g[c]++;
}
}
for(long i=1;i<=s;i++){
for(long j=n;j>=0;j--){
if(j-v[i][0]<0) {
f[i][j]=f[i-1][j];}
if(j-v[i][0]>=0)
f[i][j]=max(f[i-1][j],f[i-1][j-v[i][0]]+p[i][0]);
if(j-v[i][0]-v[i][1]>=0)
f[i][j]=max(f[i-1][j],f[i-1][j-v[i][0]-v[i][1]]+p[i][0]+p[i][1]);
if(j-v[i][0]-v[i][2]>=0)
f[i][j]=max(f[i-1][j],f[i-1][j-v[i][0]-v[i][2]]+p[i][0]+p[i][2]);
if(j-v[i][0]-v[i][1]-v[i][2]>=0)
f[i][j]=max(f[i-1][j],f[i-1][j-v[i][0]-v[i][1]-v[i][2]]+p[i][0]+p[i][1]+p[i][2]);
}
}
cout<<f[s][n];
}
by Saber_Master @ 2019-08-13 15:30:01
送你正解
#include<bits/stdc++.h>
using namespace std;
long long n,V;
long long v[1001],w[1001],p[1001],f[10000000];
long long h[10001],t=0;
struct node{
long long pr,im,tp;
}th[10001][5];
int main(){
scanf("%lld%lld",&V,&n);
for(long long i=1;i<=n;i++){
scanf("%lld%lld%lld",&v[i],&w[i],&p[i]);
if(!p[i]){
th[++t][++h[t]].pr=v[i];
th[t][h[t]].im=w[i]*v[i];
th[t][h[t]].tp=i;
}
}
for(long long i=1;i<=n;i++){
if(p[i]){
for(long long j=1;j<=t;j++){
if(th[j][1].tp==p[i]){
th[j][++h[j]].im=th[j][1].im+v[i]*w[i];
th[j][h[j]].pr=th[j][1].pr+v[i];
break;
}
}
}
}
for(long long i=1;i<=t;i++){
if(h[i]==3){
th[i][++h[i]].im=th[i][2].im+th[i][3].im-th[i][1].im;
th[i][h[i]].pr=th[i][2].pr+th[i][3].pr-th[i][1].pr;
}
}
for(long long i=1;i<=t;i++){
for(long long j=V;j>=0;j--){
for(long long k=1;k<=h[i];k++){
if(j>=th[i][k].pr){
f[j]=max(f[j],f[j-th[i][k].pr]+th[i][k].im);
}
}
}
}
printf("%lld",f[V]);
}
by Knight_Master @ 2019-08-13 15:31:27
@a3472002908 I dont want to know damage(代码); I want to know where my wrong