zoukankan      html  css  js  c++  java
  • HackerRank

    One sentence in the problem statement is crucial "your friend will also play optimally", if you interpret it correctly, you are very close to AC. What does it mean? It means, no matter what your current choice is, 1 brick or 2 or 3, your opponent will take optimized score of the rest bricks. Then, it is natural to have a 'reverse' DP:

    (thanks to http://massivealgorithms.blogspot.com/2015/01/hackerrank-play-game.html)

    t = int(input())
    for i in range(t):
        n = int(input())
        arr = [int(i) for i in input().strip().split()]
        
        ######
        def calc(arr):
            alen = len(arr)
            if alen < 4:
                return sum(arr)
            '''
            Both DP[] and PreSum[] is in terms of bottom-up
            because opponent 'your friend will also play optimally'
            '''
            #    Calc prefix sum
            presum = [0] * alen
            presum[0] = arr[0]
            for i in range(1, alen):
                presum[i] = presum[i - 1] + arr[i]
                
            #    Go DP
            dp = [0] * (alen)        
            dp[0] = arr[0]
            dp[1] = arr[1] + dp[0]
            dp[2] = arr[2] + dp[1]
            for i in range(3, alen):
                # Take 1: (i), opponent will take dp[i - 1]
                x = arr[i] + presum[i - 1] - dp[i - 1]
                # Take 2
                y = presum[i - 2] + arr[i] + arr[i - 1] - dp[i - 2]
                # Take 3
                z = presum[i - 3] + arr[i] + arr[i - 1] + arr[i - 2] - dp[i - 3]
                dp[i] = max(x, y, z)
                
            return dp[alen - 1]
        ######    
        # reverse to bottom -> top
        arr.reverse()
        print (calc(arr))
  • 相关阅读:
    [题解] [HNOI2014] 世界树
    [luogu 5301][bzoj 5503] [GXOI/GZOI2019] 宝牌一大堆
    [HDU4507]吉哥系列故事——恨7不成妻
    [国家集训队]聪聪可可
    [模板]点分治
    [2018.8.12]模拟赛B组
    JZOJ5804. 【2018.08.12提高A组模拟】简单的序列
    2018.8.10模拟赛
    2018.8.8模拟赛
    [2018.8.6]模拟赛
  • 原文地址:https://www.cnblogs.com/tonix/p/4364603.html
Copyright © 2011-2022 走看看