洛谷——P2734 游戏 A Game

P2734 游戏 A Game

 

题目背景

有如下一个双人游戏:N(2 <= N <= 100)个正整数的序列放在一个游戏平台上,游戏由玩家1开始,两人轮流从序列的任意一端取一个数,取数后该数字被去掉并累加到本玩家的得分中,当数取尽时,游戏结束。以最终得分多者为胜。

 

 

区间DP,可以从左边拿,也可以从右边拿

转台转移方程:$f[i][j]=c[j]-c[i]-min(f[i][j-1],f[i+1][j])$

#include<cstdio>
#include<iostream>
#include<cstring>

using namespace std;

int n,c[105],f[105][105];

int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%d",&c[i]),c[i]+=c[i-1];
    
    for(int k=1;k<=n;k++)
        for(int j,i=1;i+k-1<=n;i++){
            j=i+k-1;
            f[i][j]=c[j]-c[i-1]-min(f[i+1][j],f[i][j-1]);
        }
            
    cout<<f[1][n]<<" "<<c[n]-c[0]-f[1][n];
            
    return 0;
}

 

posted @ 2018-09-20 10:45  清风我已逝  阅读(118)  评论(0编辑  收藏  举报