基础的斜率优化DP
参考代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn= 500050;
int A[maxn] , dp[maxn] ,sum[maxn], M;
int myque[maxn],head,tail,N;
#define Y(i) (dp[i]+sum[i]*sum[i])
#define X(i) (sum[i])
bool head_check(int a,int b,int i){
return Y(b) - Y(a) <= 2*sum[i]*(X(b)-X(a));
}
bool tail_check(int a,int b,int c){
return (Y(b)-Y(a))*(X(c)-X(b)) >= (Y(c)-Y(b))*(X(b)-X(a));
}
int F(int j,int i){
return dp[j]+(sum[i]-sum[j])*(sum[i]-sum[j])+M;
}
int main()
{
while(scanf("%d%d",&N,&M)!=EOF){
dp[0] &