作者:
月息
,
2023-01-22 10:05:14
,
所有人可见
,
阅读 4
#include <iostream>
#include <cstring>
using namespace std;
const int N=20010;
int f[N];
int g[N];
int q[N];
int v,w,s,n,m;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>v>>w>>s;
memcpy(g,f,sizeof(f));
for(int j=0;j<v;j++){
int hh=0,tt=-1;
for(int k=j;k<=m;k+=v){
if(hh<=tt&&k-q[hh]>s*v)hh++;
while(hh<=tt&&g[q[tt]]-(q[tt]-j)/v*w<=g[k]-(k-j)/v*w)tt--;
q[++tt]=k;
f[k]=g[q[hh]]+(k-q[hh])/v*w;//g[q[hh]]−(q[hh]−j)/v∗w+(k−j)/v∗w;
}
}
}
cout<<f[m]<<endl;
return 0;
}