1 #include <bits/stdc++.h> 2 #define _for(i,a,b) for(int i = (a);i < b;i ++) 3 typedef long long ll; 4 using namespace std; 5 inline ll read() 6 { 7 ll ans = 0; 8 char ch = getchar(), last = ' '; 9 while(!isdigit(ch)) last = ch, ch = getchar(); 10 while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar(); 11 if(last == '-') ans = -ans; 12 return ans; 13 } 14 inline void write(ll x) 15 { 16 if(x < 0) x = -x, putchar('-'); 17 if(x >= 10) write(x / 10); 18 putchar(x % 10 + '0'); 19 } 20 int N; 21 int a[309]; 22 int dp[309][309]; 23 int dp2[309][309]; 24 int pre[309]; 25 26 int main() 27 { 28 N = read(); 29 _for(i,0,N) 30 a[i] = a[i+N] = read(); 31 32 memset(dp,0,sizeof(dp)); 33 _for(i,0,2*N-1) 34 dp[i][i+1] = a[i]+a[i+1]; 35 36 memset(dp2,0,sizeof(dp2)); 37 _for(i,0,2*N-1) 38 dp2[i][i+1] = a[i]+a[i+1]; 39 40 pre[0] = a[0]; 41 _for(i,1,2*N) 42 pre[i] = pre[i-1]+a[i]; 43 44 for(int d = 3;d < N+1;d ++) 45 { 46 for(int i = 0;i < 2*N-d+1;i ++) 47 { 48 int j = i+d-1; 49 dp2[i][j] = 0x3f3f3f3f; 50 for(int k = i;k < j;k ++) 51 { 52 dp[i][j] = max(dp[i][j],dp[i][k]+dp[k+1][j]+pre[j]-pre[i]+a[i]); 53 dp2[i][j] = min(dp2[i][j],dp2[i][k]+dp2[k+1][j]+pre[j]-pre[i]+a[i]); 54 } 55 } 56 } 57 58 int rnt = 0; 59 _for(i,0,N) 60 rnt = max(rnt,dp[i][i+N-1]); 61 62 int rnt2 = 0x3f3f3f3f; 63 _for(i,0,N) 64 rnt2 = min(rnt2,dp2[i][i+N-1]); 65 write(rnt2);printf("\n"); 66 write(rnt); 67 return 0; 68 }