10891 - Game of Sum

2014-11-24 01:44:16 · 作者: · 浏览: 6
[cpp]
描述:博弈题目,双方可以数组任何一边取连续的的几个数组元素的值的和,但不能同时从两边去,可以从一边一次取到头
#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 for(int i=x+1; i<=y; i++) c=min(c,dp(i,y));
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;
}