为什么我把快读、单调队列、无max优化都用了才60:(
查看原帖
为什么我把快读、单调队列、无max优化都用了才60:(
484332
NOIer楼主2023/8/3 09:37
#include <bits/stdc++.h>
using namespace std;
const int N=1e4+10;

long long n,m,c,v,w,d,f[2][N],f2[N],q[N];
inline long long read(){
    long long 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 main()
{
	scanf("%lld%lld%lld",&n,&m,&c);
	
	for(int i=1;i<=n;i++) {
		v=read(),w=read(),d=read();
		for(int r=0;r<v;r++){
			int hh=0,tt=-1;
			for(int j=r;j<=c;j+=v){
				while(hh<=tt && (j-q[hh])>d*v) hh++;
				while(hh<=tt && f[i&1^1][q[tt]]+(j-q[tt])/v*w<=f[i&1^1][j]) tt--;
				q[++tt]=j;
				f[i&1][j]=f[i&1^1][q[hh]]+(j-q[hh])/v*w;
			}
		}
	} 
	for(int i=1;i<=c;i++) f2[i]=f[n&1][i];
	for(int i=1;i<=m;i++)
	{
		int ai,bi,ci;
		ai=read(),bi=read(),ci=read();
		for(int j=c;j>=0;j--)
			for(int x=0;x<=j;x++)
				if(f2[j]<f2[j-x]+(ai*x+bi)*x+ci) 
					f2[j]=f2[j-x]+(ai*x+bi)*x+ci;
	}
	cout<<f2[c];
		
	return 0;
}
2023/8/3 09:37
加载中...