• SUM游戏


    题意:就是有一个长度为n的整数序列,两个游戏者A和B轮流取数,A先取。每次玩家只能从左端或者右端取任意数量个数,但不能两端都取。

    所有数都被取走后游戏结束,然后统计每个人取走的所有数之和,作为各自的得分。两个人采取的策略都是让自己的得分尽量高,并且两个人

    都足够聪明,求A的得分减去B的得分后的结果。

    题意还是比较明朗的了,两个人都足够聪明,这一句十分关键,所有他是知道应该怎么取使得最大,也就是说,你所能想到的最聪明的方法,

    就是他第一步想到的方法,我们可以DP,每一次做其最优解,枚举时枚举的是当前这一次,我可以去实现一下。

    但是觉得没有实现的意义,只是觉得思维非常不错,可以是DP[i,j]表示sum[i,j]-min{dp[i+1,j],dp[i+2,j],...,dp[i,j-1],....,dp[i,i]}

    然后因为A先取,所以输出2*DP[1][N]-sum[n]---------------及dp[1][n]-(sum[n]-dp[1][n]),拆开就是了。

    时间复杂度是O(n^3)那么如果数据是3000该怎么过呢,答案是可以发现一种递推性,递推出i+1,j的最优状态,i,j-1的最优状态,然后转移

    的时间就剩下O(1)了,所以复杂度降为O(n^2)

  • 相关阅读:
    mv、umask、chattr、lsattr命令
    mkdir、whoami、touch
    man命令
    hostname、uname、dmesg、fdisk
    find命令
    etc下
    echo命令
    date 、cal、bc
    表白程序源代码,android
    设置Windows 8.1屏幕自己主动旋转代码, Auto-rotate function code
  • 原文地址:https://www.cnblogs.com/fengzhiyuan/p/7230466.html
Copyright © 2020-2023  润新知