求助!单调队列优化90分!WA了第1个点
查看原帖
求助!单调队列优化90分!WA了第1个点
625821
2011qiqi楼主2022/8/7 18:50

对了,按理说优先队列优化应该比二进制优化快才对啊,但是,我为什么这个程序运行了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;
}
2022/8/7 18:50
加载中...