貌似所有提交记录里就我只有20分了;
提交记录;
code:
#include "bits/stdc++.h"
using namespace std;
#define Long long long int
#define MAXN 11000
Long F[MAXN],U[MAXN],V[MAXN],Size;
Long A[MAXN],B[MAXN],C[MAXN];
int N,M,K,X,SmV,SmU,UT;
int main(void){
Size=0;
scanf("%d%d%d",&N,&K,&M);
for(register int i=1;i<=N;i++){
scanf("%d%d%d",&SmV,&SmU,&X);
UT=1;
while(UT<X){
V[++Size]=UT*SmV;
U[Size]=UT*SmU;
X=X-UT;
UT<<=1;
}
V[++Size]=X*SmV;
U[Size]=X*SmU;
}
N=Size;//二进制拆分
for(register int i=1;i<=N;i++)
for(register int j=V[i];j<=M;j++)
F[j]=max(F[j],F[j-V[i]]+U[i]);
//跑一遍多重背包
for(register int i=1;i<=K;i++)
scanf("%lld%lld%lld",&A[i],&B[i],&C[i]);
for(register int i=1;i<=K;i++)
for(register int j=M;j>=0;j--)
for(register Long k=0;k<=j;k++)
F[j]=max(F[j],F[j-k]+k*k*A[i]+k*B[i]+C[i]);
printf("%lld\n",F[M]);
return 0;
}