#include<bits/stdc++.h>
#define inf 1000000000000000ll
#define N 105
#define M 100005
using namespace std;
int n,m,cnt,w[N],v[N],l[N],d[M];
long long ans,f[M][N];
long long dp(int i,int j){
if(~f[i][j]) return f[i][j];
if(j==0){
for(int x=1;x<=n;++x)
f[i][j]=max(f[i][j],dp(i,x));
}
else{
if(i>=w[j]) f[i][j]=max(f[i][j],dp(i-w[j],j)+v[j]);
if(i>=w[j]*l[j]) f[i][j]=max(f[i][j],dp(i-w[j]*l[j],0)-d[i-w[j]*l[j]]+(long long)v[j]*l[j]);
}
if(!~f[i][j]) f[i][j]=-inf;
return f[i][j];
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i) scanf("%d",&d[i]);
for(int x,y,z,i=1;i<=n;++i){
scanf("%d%d%d",&x,&y,&z);
if((long long)x*z>m) continue;
++cnt,w[cnt]=x,v[cnt]=y,l[cnt]=z;
}
n=cnt;
memset(f,-1,sizeof f),f[0][0]=0;
for(int i=1;i<=m;++i){
ans=max(ans,dp(i,0));
printf("%lld ",ans);
}
return 0;
}
【bzoj 5390】F.糖果商店(背包DP)
最新推荐文章于 2024-09-29 12:39:37 发布