斜率优化求助,玄关
查看原帖
斜率优化求助,玄关
442801
cy1999_de_dog楼主2023/11/13 21:31
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
long long dp[N],sum[N];
int q[N];
long long a,b,c;
long long x(int i)
{
	return sum[i];
}
long long y(int i)
{
	return dp[i]+a*sum[i]*sum[i]-b*sum[i];
}
double xl(int i,int j)
{
	return 1.0*(y(i)-y(j))/((x(i)-x(j)));
}
int main()
{
	int n;
	cin>>n>>a>>b>>c;
	for(int i=1;i<=n;i++)
	{
		long long d;
		cin>>d;
		sum[i]=sum[i-1]+d;
	}
	int l=0,r=0;
	for(int i=1;i<=n;i++)
	{
		long long k=2*a*sum[i];
		int j1=q[l],j2=q[l+1];
		while(l<r&&(xl(j1,j2)>k)) l++;
		int j=q[l];
		dp[i]=dp[j]+a*(sum[i]-sum[j])*(sum[i]-sum[j])+b*(sum[i]-sum[j])+c;
		j1=q[r],j2=q[r-1];
		while(l<r&&xl(j2,j1)<=xl(j1,i)) r--;
		q[++r]=i;
	}
	cout<<dp[n]<<endl;
	return 0;
}

10分,剩下全wa

2023/11/13 21:31
加载中...