比赛 2024国庆练习3 评测结果 AAAAAAAAATTTTTTTEEEEEEEEE
题目名称 划分 最终得分 36
用户昵称 健康铀 运行时间 39.174 s
代码语言 C++ 内存使用 194.37 MiB
提交时间 2024-10-06 15:31:21
显示代码纯文本
#include <bits/stdc++.h>
#define ll long long
using namespace std ;
const int maxn = 5e3+5 ;
int n , type , a[maxn] ;
ll s[maxn] , dp[maxn][maxn] , ans = LLONG_MAX ;
int main(){
	freopen("2019partition.in","r",stdin);
	freopen("2019partition.out","w",stdout);
	cin >> n >> type ;
	memset(dp,0x7f,sizeof(dp)) ;
	for ( int i = 1 ; i <= n ; i++ ){
		cin >> a[i] ;
		s[i] = s[i-1]+a[i] ;
	}
	for ( int i = 1 ; i <= n ; i++ ){
		dp[i][1] = s[i]*s[i] ;
		for ( int j = 2 ; j <= i ; j++ ){
			for ( int k = 1 ; k <= j-1 ; k++ ){
				if (s[i]-s[j-1]>=s[j-1]-s[k-1])
					dp[i][j] = min(dp[i][j],dp[j-1][k]+(s[i]-s[j-1])*(s[i]-s[j-1])) ;
			}
		}
	}
	for ( int i = 1 ; i <= n ; i++ ) ans = min(ans,dp[n][i]) ;
	cout << ans ;
	return 0 ;
}