Light oj1031 Easy Game (区间dp)

题目链接:http://vjudge.net/contest/140891#problem/F

A和B都足够聪明,只有我傻,想了好久才把代码和题意对应上[大哭]

代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define ll long long
const int INF=0x3f3f3f3f;

int dp[105][105];
int a[105],sum[105];

int main(){
    //freopen("in.txt","r",stdin);
    int T;
    scanf("%d",&T);
    for(int t=1; t<=T; t++){
        int n;
        scanf("%d",&n);
        memset(sum,0,sizeof(sum));
        for(int i=1; i<=n; i++){
            scanf("%d",&a[i]);
            dp[i][i]=a[i];
            sum[i]=sum[i-1]+a[i];
        }
        for(int d=1; d<n; d++)
        for(int i=1; i+d<=n; i++){
            int j=i+d;
            dp[i][j]=sum[j]-sum[i-1];
            for(int k=i; k<j; k++)
            dp[i][j]=max(dp[i][j],max(sum[k]-sum[i-1]-dp[k+1][j],sum[j]-sum[k]-dp[i][k]));
        }
        printf("Case %d: %d\n",t,dp[1][n]);
    }
    return 0;
}

 

posted @ 2016-11-15 18:16  a_clown_cz  阅读(123)  评论(0)    收藏  举报