10891 - Game of Sum

来源:互联网 发布:爱娱网络 狂龙 编辑:程序博客网 时间:2024/06/07 06:44
描述:博弈题目,双方可以数组任何一边取连续的的几个数组元素的值的和,但不能同时从两边去,可以从一边一次取到头#include <cstdio>#include <cstring>#include <cstdlib>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<y; i++) c=min(c,dp(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;}

原创粉丝点击