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; }