#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
int main()
{
int n, k, a[202];
int dp_max[202][202], dp_min[202][202];
cin>>n;
memset(dp_max, 0, sizeof(dp_max));
memset(dp_min, 0, sizeof(dp_min));
for (int i = 1; i <= n; i++){
cin>>a[i];
a[i+n] = a[i];
}
int sum[202];
sum[0] = 0;
for (int i = 1; i <= 2*n; i++){
sum[i] = sum[i-1] + a[i];
}
for (int i = 2*n-1; i >= 1; i--){
for (int j = i+1; j<i+n&&j<=2*n; j++){
dp_min[i][j] = inf;
for (int k = i; k < j; k++){
dp_max[i][j] = max(dp_max[i][j], dp_max[i][k]+dp_max[k+1][j]+sum[j]-sum[i-1]);
dp_min[i][j] = min(dp_min[i][j], dp_min[i][k]+dp_min[k+1][j]+sum[j]-sum[i-1]);
}
}
}
int max_res = -1, min_res = inf;
for (int i = 1; i <= n; i++){
max_res = max(max_res, dp_max[i][i+n-1]);
min_res = min(min_res, dp_min[i][i+n-1]);
}
cout<<min_res<<endl;
cout<<max_res<<endl;
return 0;
}
SDUTOJ 1729 - 石子合并问题
最新推荐文章于 2022-02-09 18:52:03 发布