stl求调
查看原帖
stl求调
366316
桃雨凪丝楼主2022/7/12 16:54
#include<bits/stdc++.h>
#define I using
#define love namespace
#define oi std
I love oi;
typedef long long ll;
typedef double db;
#define re register int
#define ce continue
#define pf printf
#define sf scanf
#define inf 1e9+10
#define lim 2010
#define mod 998244353
//#define int ll
int gcd(int x,int y){return y?gcd(y,x%y):x;}
inline int rd(){
	int x=0,f=1;char ch=getchar();
	while (ch<'0' || ch>'9'){if (ch=='-')f=-1;ch=getchar();}
	while ('0'<=ch && ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
	return x*f;
}
int T,MAXP,W;
int ap,bp,as,bs;
int f[lim][lim];
signed main(){
	ios_base::sync_with_stdio(false);cin.tie(0);
	//freopen(".in","r",stdin);	
	//freopen(".out","w",stdout);
	cin>>T>>MAXP>>W;
	for(int i=1;i<=T;i++){
		cin>>ap>>bp>>as>>bs;
		for(int j=0;j<=as;j++)f[i][j]=-(j*ap);
		for(int j=0;j<=MAXP;j++)f[i][j]=max(f[i][j],f[i-1][j]);
		if(i<=W)ce;
		deque<int>s;
		for(int j=0;j<=MAXP;j++){
			while(!s.empty()&&s.front()<j-as)s.pop_front();
			while(!s.empty()&&f[i-W-1][s.back()]+s.back()*ap<=f[i-W-1][j]+j*ap)s.pop_back();
			s.push_back(j);
			if(!s.empty())f[i][j]=max(f[i][j],f[i-W-1][s.front()]+s.front()*ap-j*ap); 
		}
		s.clear();
		for(int j=MAXP;j>=0;j--){
			while(!s.empty()&&s.front()>j+bs)s.pop_front();
			while(!s.empty()&&f[i-W-1][s.back()]+s.back()*bp<=f[i-W-1][j]+j*bp)s.pop_back();
			s.push_back(j);
			if(!s.empty())f[i][j]=max(f[i][j],f[i-W-1][s.front()]+s.front()*bp-j*bp); 
		}
	}
	int ans=0;
	for(int i=0;i<=MAXP;i++)ans=max(ans,f[T][i]);
	cout<<ans;
		
	
	return 0;
}	
2022/7/12 16:54
加载中...