Wrong answer on test 8求助
查看原帖
Wrong answer on test 8求助
394167
Cure_Wing楼主2023/2/1 07:53
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define int long long
using std::cin;using std::cout;
constexpr int N=5050,inf=1e18;
int n,k,x,a[N],f[N][N],q[N],head,tail,ans;
signed main(){
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	std::ios::sync_with_stdio(false);
	cin.tie(nullptr);cout.tie(nullptr);
	cin>>n>>k>>x;
	if(n/k>x){cout<<-1;return 0;}
	for(int i=1;i<=n;++i) cin>>a[i];
	for(int i=0;i<=n;++i)
		for(int j=0;j<=x;++j)
			f[i][j]=-inf;
	f[0][0]=0;
	for(int j=1;j<=x;++j){
		q[head=tail=1]=0;
		for(int i=1;i<=n;++i){
			while(head<=tail&&q[head]<i-k) ++head;
			if(head<=tail) f[i][j]=f[q[head]][j-1]+a[i];
			while(head<=tail&&f[q[head]][j-1]<=f[i][j-1]) --tail;
			q[++tail]=i;
		}
	}
	for(int i=n-k+1;i<=n;++i) ans=std::max(f[i][x],ans);
	cout<<ans;
	return 0;
}
2023/2/1 07:53
加载中...