您的位置:首页 > 其它

uva 10891 - Game of Sum

2013-11-13 18:51 309 查看
题解 白书上 总和一定的 dp 题;经典题

#include<iostream>
#include<stdio.h>
#include<cstring>
#include<algorithm>
using namespace std;

int dp[105][105],M,sum[105],arr[105];
int main( )
{
while( scanf("%d",&M) && M )
{
memset( dp,0,sizeof(dp) );
memset( sum,0,sizeof(sum) );
for( int i = 1; i <= M; i++ )
{
scanf("%d",&arr[i]);
sum[i] = sum[i-1]+arr[i];
}
for( int i = 0; i <= M; i++ )dp[i][i] = arr[i];
for( int i = 1; i < M; i++ )
for( int j = 1; j+i <= M; j++ )
{
int l = i+j; int ans = sum[l] - sum[j-1];
int Min = 0;
for( int k = j; k <= l; k++ )
{
Min = min( Min,dp[j][k] );
Min = min( Min,dp[k][l] );
}
dp[j][l] = ans - Min;
}
cout<<dp[1][M]*2-sum[M]<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: