2017 JUST Programming Contest 3.0 J. Boxes Game

题意:n个价值的东西,A,B两个人可以从最左或最右拿加入自己的分数,都想尽量大,问A-B

思路:dp[i][j]表示当前这个人取l-r区间的最大值是多少,即为max(sum(a[l]+...a[r])-dp[l][r-1],sum(a[l]+...a[r])-dp[l+1][r]);

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int inf=-1e9;
 4 
 5 int dp[1100][1100];
 6 int a[1100];
 7 int n;
 8 
 9 int hh(int l,int r){
10     if(dp[l][r]!=inf) return dp[l][r];
11     if(l>r) return dp[l][r]=0;
12     int sum=0,ans=inf;
13     if(l<=r) sum+=a[r]-a[l-1];
14     if(l<=r){
15         ans=max(ans,sum-hh(l+1,r));
16         ans=max(ans,sum-hh(l,r-1));
17     }
18     return dp[l][r]=ans;
19 }
20 int main(){
21     int t;
22     cin>>t;
23     while(t--){
24         scanf("%d",&n);
25         for(int i=1;i<=n+1;i++)
26             for(int j=1;j<=n+1;j++) dp[i][j]=inf;
27         for(int i=1;i<=n;i++){
28             int x;
29             scanf("%d",&x);
30             a[i]=a[i-1]+x;
31 
32         }
33        int x=hh(1,n);
34         cout<<x-(a[n]-x)<<endl;
35     }
36 }

 

posted on 2017-09-15 19:15  hhhhx  阅读(221)  评论(0)    收藏  举报

导航