
对于所有数据:1 < n,m < 10^6, 1<ai<100。
我会O(N^2)的做法;
#include<bits/stdc++.h>
using namespace std;
long long n,m;
long long a[1000100],dp[1000100];
int main(){
cin>>n>>m;
for(int i = 1;i <= n;i++){
cin>>a[i];
a[i]+=a[i-1];
}
memset(dp,0x3f,sizeof(dp));
dp[0] = 0;
for(int i = 1;i <= n;i++){
for(int j = 0;j <= i-1;j++){
dp[i] = min(dp[i],dp[j]+(a[i]-a[j])*(a[i]-a[j])+m);
}
}
cout<<dp[n];
return 0;
}
但不知道怎么优化