对了,按理说优先队列优化应该比二进制优化快才对啊,但是,我为什么这个程序运行了3.06s呢?
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
inline int read(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();}
while(isdigit(ch)){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
return x*f;
}
int dp[N],q[N],pre[N];
int main(){
int n=read(),m=read();
for(int i=0;i<n;i++){
memcpy(pre, dp, sizeof(dp));
int v=read(),w=read(),num=read();
for(int j=0;j<v;j++){
int head=0,tail=-1;
for(int k=j;k<=m;k+=w){
if(head<=tail && k-num*w>q[head]) ++head;
while(head<=tail && pre[q[tail]]-(q[tail]-j)/w*v<=pre[k]-(k-j)/w*v) --tail;
if(head<=tail) dp[k]=max(dp[k], pre[q[head]]+(k-q[head])/w*v);
q[++tail]=k;
}
}
}
printf("%d", dp[m]);
return 0;
}