0pts求助
查看原帖
0pts求助
941743
zhujianheng楼主2023/9/25 17:14
#include<bits/stdc++.h>
using namespace std;
int n,m,ap,bp,as,bs,w,ans,f[2010][2010];
deque<int> q;
int main(){
	cin>>n>>m>>w;
	for(int i=1;i<=n;i++){
		cin>>ap>>bp>>as>>bs;
		for(int j=0;j<=as;j++) f[i][j]=-j*ap;
		for(int j=0;j<=m;j++) f[i][j]=max(f[i][j],f[i-1][j]);
		if(i<=w) continue;
		q.clear();
		for(int j=0;j<=m;j++){
			while(!q.empty() && q.front()<j-as) q.pop_front();
			while(!q.empty() && f[i-w-1][q.back()]+q.back()*ap<=f[i-w-1][j]+j*ap) q.pop_back();
			q.push_back(j);
			if(!q.empty()) f[i][j]=max(f[i-w-1][q.front()]+q.front()*ap-j*ap,f[i][j]);
		}
		q.clear();
		for(int j=m;j>=0;j--){
			while(!q.empty() && q.front()>j+bs) q.pop_front();
			while(!q.empty() && f[i-w-1][q.back()]+q.back()*bp<=f[i-w-1][j]+j*bp) q.pop_back();
			q.push_back(j);
			if(!q.empty()) f[i][j]=max(f[i-w-1][q.front()]+q.front()*bp-j*bp,f[i][j]);
		}
	}
	for(int i=0;i<=m;i++) ans=max(ans,f[n][i]);
	cout<<ans<<endl;
	return 0;
}
2023/9/25 17:14
加载中...