zoukankan      html  css  js  c++  java
  • Easy Game LightOJ

    Easy Game LightOJ - 1031

    upd:似乎有复杂度更优越的做法,见http://www.cnblogs.com/hehe54321/p/8431020.html


    题意:A和B玩一个游戏,A先手。规则是两人轮流在当前数列的任意一端取走任意个数(但不能两端都取),然后把这些数的和加到自己的得分上,直到数列被取完。如果两人都采取最优策略,那么A比B最多能多得多少分?

    sum(l,r)表示原数列l到r范围内的数之和。ans[l][r]表示要取完l到r区间的数,先手的人可以得到的比对手多的最大得分。

    那么,如果l==r,也就是只有一个,那么他必须取这一个,ans[l][r]=sum(l,r)。

    否则,他可以选择在左侧取走第l个到第i个,那么自己得到sum(l,i),之后对手按照最优策略能比自己多ans[i+1][r]分,那么ans[l][r]=max{sum(l,i)-ans[i+1][r]}。他也可以选择在右侧取走第i个到第r个,那么自己得到sum(i,r),之后对手按照最优策略比自己多ans[l][i-1],那么ans[l][r]=max{sum(i,r)-ans[l][i-1]}。他也可以选择全部选完,那么ans[l][r]=sum(l,r)。最后答案就是上述三种中最大的一种。时间复杂度$O(n^3)$。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 int sum[110],ans[110][110],a[110],T,TT,n;
     6 int getsum(int l,int r)
     7 {
     8     return sum[r]-sum[l-1];
     9 }
    10 int get(int l,int r)
    11 {
    12     if(ans[l][r])    return ans[l][r];
    13     int i,maxans=getsum(l,r);
    14     for(i=l;i<r;i++)
    15         maxans=max(maxans,getsum(l,i)-get(i+1,r));
    16     for(i=r;i>l;i--)
    17         maxans=max(maxans,getsum(i,r)-get(l,i-1));
    18     return ans[l][r]=maxans;
    19 }
    20 int main()
    21 {
    22     int i;
    23     scanf("%d",&T);
    24     for(TT=1;TT<=T;TT++)
    25     {
    26         memset(a,0,sizeof(a));
    27         memset(sum,0,sizeof(sum));
    28         memset(ans,0,sizeof(ans));
    29         scanf("%d",&n);
    30         for(i=1;i<=n;i++)
    31             scanf("%d",&a[i]);
    32         for(i=1;i<=n;i++)
    33             sum[i]=sum[i-1]+a[i];
    34         printf("Case %d: %d
    ",TT,get(1,n));
    35     }
    36     return 0;
    37 }
  • 相关阅读:
    CSS Sprite笔记
    前端分页页码静态部分制作
    有趣的网页小部件笔记
    Lintcode 85. 在二叉查找树中插入节点
    Lintcode 166. 主元素
    网页失去焦点标题变化效果
    Lintcode 166. 链表倒数第n个节点
    Lintcode 157. 判断字符串是否没有重复字符
    Lintcode 175. 翻转二叉树
    Lintcode 372. O(1)时间复杂度删除链表节点
  • 原文地址:https://www.cnblogs.com/hehe54321/p/loj-1031.html
Copyright © 2011-2022 走看看