描述:博弈题目,双方可以数组任何一边取连续的的几个数组元素的值的和,但不能同时从两边去,可以从一边一次取到头
#include
#include
#include
int n,sum;
int arr[110];
int v[110][110];
int min(int x,int y)
{
return x>y y:x;
}
int dp(int x,int y)
{
if(v[x][y]>sum) return v[x][y];
int c=0;
for(int i=x; i
v[x][y]=arr[y]-arr[x-1]-c;
return v[x][y];
int main()
{
//freopen("a.txt","r",stdin);
while(scanf("%d",&n)!=EOF)
{
if(!n) break;
arr[0]=0;
for(int i=1; i<=n; i++)
{
scanf("%d",&arr[i]);
arr[i]+=arr[i-1];
}
memset(v,-127,sizeof(v));
sum=v[0][0];
printf("%d\n",2*dp(1,n)-arr[n]);
}
return 0;
}