#include<iostream> #include<cstring> #include<cstdio> using namespace std; int n,a[301],sum[301][301]={0},f_min[301][301]={0},f_max[301][301]={0}; void init(); void work(); int my_min(int,int); int my_max(int,int); int main() { //freopen("stone5.in","r",stdin); //freopen("stone5.out","w",stdout); init(); work(); return 0; } void init() { cin>>n; for(int i=1;i<=n;i++)cin>>a[i]; for(int i=1;i<n;i++) { int tot=a[i]; for(int j=i+1;j<=n;j++) { tot+=a[j]; sum[i][j]=tot; } } } void work() { for(int d=2;d<=n;d++) { for(int i=1;i<=n-d+1;i++) { int j=i+d-1; f_min[i][j]=0x7fffffff/2; for(int k=i;k<j;k++) { f_max[i][j]=my_max(f_max[i][j],f_max[i][k]+f_max[k+1][j]); f_min[i][j]=my_min(f_min[i][j],f_min[i][k]+f_min[k+1][j]); } f_max[i][j]+=sum[i][j]; f_min[i][j]+=sum[i][j]; } } cout<<f_min[1][n]<<endl; cout<<f_max[1][n]<<endl; } int my_min(int x,int y) { if(x<y)return x; else return y; } int my_max(int x,int y) { if(x>y)return x; else return y; } /************************************************************** Problem: 2116 User: admin Language: C++ Result: Accepted Time:27 ms Memory:3140 kb ****************************************************************/