#include <bits/stdc++.h>
using namespace std;
int n,a[10005],cost[10005],dp[1005][1005],dp2[1005][1005] = {-0x3f};
int main(){
memset(dp,0x3f,sizeof(dp));
memset(dp2,-0x3f,sizeof(dp2));
cin >> n;
for (int i = 1;i <= n;i++){
cin >> a[i];
a[n+i] = a[i];
}
for (int i = 1;i <= n*2;i++){
cost[i] = cost[i-1]+a[i];
dp[i][i] = 0,dp2[i][i] = 0;
}
n *= 2;
int j;
for (int l = 2;l <= n;l++){
for (int i = 1;i <= n - l + 1;i++){
j = i + l - 1;
for (int k = i;k <= j;k++){
dp[i][j] = min(dp[i][j],dp[i][k] + dp[k+1][j] + cost[j] - cost[i-1]);
dp2[i][j] = max(dp2[i][j],dp2[i][k] + dp2[k+1][j] + cost[j] - cost[i-1]);
}
}
}
cout << dp[1][n/2] - 1 << "\n" << dp2[1][n/2];
return 0;
}
给理由,别直接给代码.
@清空