Quantcast
Channel: CSDN博客推荐文章
Viewing all articles
Browse latest Browse all 35570

10891 - Game of Sum

$
0
0
描述:博弈题目,双方可以数组任何一边取连续的的几个数组元素的值的和,但不能同时从两边去,可以从一边一次取到头
#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;
}

作者:moyan_min 发表于2013-5-24 12:54:56 原文链接
阅读:64 评论:0 查看评论

Viewing all articles
Browse latest Browse all 35570

Trending Articles