Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include<stdio.h>#include<string.h>int A[1010];int B[1010][1010][2];int N;int max(int x,int y){if(x>y)return x;else return y;}int min(int x,int y){if(x<y)return x;else return y;}int main(){int i,j,k,l;while(scanf("%d",&N)!=EOF){memset(B,0,sizeof(B));for(i=1;i<=N;i++)scanf("%d",&A[i]);for(i=1;i<=N;i++)B[i][i][0]=A[i];for(i=2;i<=N;i++){for(j=1;j<=N-i+1;j++){k=j+i-1;B[j][k][0]=max(B[j][k-1][1]+A[k],B[j+1][k][1]+A[j]);B[j][k][1]=B[j][k-1][0]+B[j][k-1][1]+A[k]-B[j][k][0];