全程瞎写...轻点喷
#include<bits/stdc++.h>
using namespace std;
int dp[1001][1001],a[100001],s[100001];
int main()
{
int n;
cin>>n;
for(int i = 1;i <= n;i ++)
{
cin>>a[i];
s[i] = s[i - 1] + a[i];
a[i + n] = a[i];
}
for(int i = n + 1;i <= 2 * n;i ++)
{
s[i] = s[i - 1] + a[i];
}
for(int l = 2;l <= n;l ++)
{
for(int i = 1;l + i - 1 <= 2 * n;i ++)
{
int j = l + i - 1;
for(int k = i;k <= j - 1;k ++)
{
dp[i][j] = max(dp[i][k] + dp[k + 1][j],dp[i][j]);
}
dp[i][j] += s[j] - s[i - 1];
}
}
int maxans = -1e9;
for(int i = 1;i <= n;i ++)
{
maxans = max(maxans,dp[i][n + i - 1]);
}
memset(dp,0x3f,sizeof(dp));
for(int i = 1;i <= n;i ++)
{
dp[i][i] = 0;
}
for(int l = 2;l <= n;l ++)
{
for(int i = 1;l + i - 1 <= 2 * n;i ++)
{
int j = l + i - 1;
for(int k = i;k <= j - 1;k ++)
{
dp[i][j] = min(dp[i][k] + dp[k + 1][j],dp[i][j]);
}
dp[i][j] += s[j] - s[i - 1];
}
}
int minans = 1e9;
for(int i = 1;i <= n;i ++)
{
minans = min(minans,dp[i][n + i - 1]);
}
cout<<minans<<endl<<maxans;
return 0;
}