dp[ l ][ r ] : 序列还剩[l,r]时先手取的最大得分,sum[ i ][ j ]计算 i 到 j 总和
l :1 to n i : 1 to n-l
dp[ i ][ i+l ] = sum[ i ][ i+l ] - min{ dp[ i ][ i+l-1 ] , dp[ i+1 ][ i+l ] };
/*
ID:xsy97051
LANG:C++
TASK:game1
*/
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int n,num[101],dp[101][101],sum[101][101];
int main()
{
freopen("game1.in","r",stdin);
freopen("game1.out","w",stdout);
memset(dp,0,sizeof(dp));
cin>>n;
for(int i=1;i<=n;i++)
cin>>num[i];
for(int i=1;i<=n;i++)
{
sum[i][i]=num[i];
for(int j=i+1;j<=n;j++)
sum[i][j]=sum[i][j-1]+num[j];
}
for(int i=1;i<=n;i++)
dp[i][i]=num[i];
for(int l=1;l<n;l++)
for(int i=1;i<=n-l;i++)
dp[i][i+l]=sum[i][i+l]-min(dp[i][i+l-1],dp[i+1][i+l]);
cout<<dp[1][n]<<" "<<sum[1][n]-dp[1][n]<<endl;
return 0;
}