#pragma warning(disable:4996)
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int f[210][210];//f[i][j]表示从i堆到j堆的最大情况
int g[210][210];//最小
int a[210];
int main(){
int N;
scanf("%d", &N);
for (int i = 0; i < N; i++)
{
scanf("%d", &a[i]);
a[i + N] = a[i];
}
for(int i=0;i<2*N-1;i++)
{
f[i][i + 1] = a[i] + a[i + 1];
g[i][i + 1] = a[i] + a[i + 1];
}
for (int i = 0; i < 2 * N-1; i++)
{
for (int j = i+1; j < 2 * N; j++)
{
if (j - i >= N)
{
continue;
}
int max = 0;
for (int k = i+1; k < j; k++)
{
max = max > (f[i][k] + f[k + 1][j]) ? max : (f[i][k] + f[k + 1][j]);
}
int min = max;
for (int k = i+1; k < j; k++)
{
min = min < (g[i][k] + g[k + 1][j]) ? min : (g[i][k] + g[k + 1][j]);
}
int sum = 0;
for (int k = i; k <= j; k++)
{
sum += a[k];
}
f[i][j] = max + sum;
g[i][j] = min + sum;
}
}
int max = 0;
for (int i = 0; i <= N; i++)
{
max = max > f[i][i + N-1] ? max : f[i][i + N-1];
}
int min = max;
for (int i = 0; i <= N; i++)
{
min = min < g[i][i + N-1] ? min : g[i][i + N-1];
}
printf("%d\n%d", min, max);
return 0;
}
想问一下友友们代码问题在哪里,只过了第1、5个数据点,求助求助