不知道为什么厌氧
查看原帖
不知道为什么厌氧
889917
limingyuan333楼主2024/9/29 22:52
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,a[2000010],pre[2000010];
int dp[5010][5010];
signed main(){
	int op;
	cin>>n>>op;
	for(int i=1;i<=n;i++)	cin>>a[i];
	for(int i=1;i<=n;i++)	pre[i]=pre[i-1]+a[i];
	memset(dp,0x3f,sizeof(dp));
	for(int i=1;i<=n;i++)	dp[i][0]=pow(pre[i],2);
	for(int j=0;j<n;j++){	
		int k=j-1;
		int minn=LONG_LONG_MAX/2;
		for(int i=j+1;i<=n;i++){
			int num=(int)pow(pre[i]-pre[j],2ll);
			while(pre[j]*2<=pre[i]+pre[k]){
				minn=min(minn,dp[j][k]);
				if(k==0)	break;
				k--;
			}		
			dp[i][j]=min(dp[i][j],minn+num);
		}
	}
	int maxn=LONG_LONG_MAX;
	for(int i=0;i<=n;i++){
		maxn=min(maxn,dp[n][i]);
	}
	cout<<maxn;
	return 0;
} 
2024/9/29 22:52
加载中...