社区讨论

deque的常数这么大吗

P5858「SWTR-3」Golden Sword参与者 8已保存回复 7

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
7 条
当前快照
1 份
快照标识符
@lod0nson
此快照首次捕获于
2023/10/30 22:49
2 年前
此快照最后确认于
2023/11/05 09:07
2 年前
查看原帖
RT
这份代码居然只有50pts,比暴力都还低
CPP
#include<stdio.h>
#include<bits/stdc++.h>
using namespace std;

const int N=5505;
int n,w,s;
long long ans=-1e18;
int a[N];
long long f[N][N];

int main(void)
{
	scanf("%d%d%d",&n,&w,&s);
	for(register int i=1;i<=n;++i)
		scanf("%d",a+i);
	for(register int i=0;i<=n;++i)
		for(register int j=0;j<=w;++j)
			f[i][j]=-1e18;
	f[0][0]=0;
	for(register int i=1;i<=n;++i)
	{
		deque<int>q;
		q.push_front(w);
		for(register int j=w;j;--j)
		{
			while(q.front()>j+s-1&&!q.empty()) q.pop_front();
			while(f[i-1][q.back()]<f[i-1][j-1]&&!q.empty()) q.pop_back();
			q.push_back(j-1);
			f[i][j]=f[i-1][q.front()]+1ll*a[i]*j;
		}
	}
	for(register int i=1;i<=w;++i)
		ans=max(ans,f[n][i]);
	printf("%lld\n",ans);
	return 0;
}
换成手写队列就A了

回复

7 条回复,欢迎继续交流。

正在加载回复...