zoukankan      html  css  js  c++  java
  • 动态规划_leetcode312

    #coding=utf-8

    # 递归
    class Solution1(object):
    def maxCoins(self, nums):
    """
    :type nums: List[int]
    :rtype: int
    """
    self.res = 0

    if not nums:
    return self.res

    self.res = self.getMaxValue(nums)

    print self.res
    return self.res

    def getMaxValue(self,nums):

    nLen = len(nums)

    if nLen == 1:
    return nums[0]

    maxRes = 0

    for i in range(nLen):

    if i == 0 :
    temp = nums[0:]
    temp.pop(i)
    maxRes = max(maxRes,nums[i]*nums[i+1]+self.getMaxValue(temp))


    elif i == nLen-1:
    temp = nums[0:]
    temp.pop(i)
    maxRes = max(maxRes, nums[i] * nums[i-1]+self.getMaxValue(temp))


    else:
    temp = nums[0:]
    temp.pop(i)
    maxRes = max(maxRes, nums[i-1]* nums[i]*nums[i+1]+ self.getMaxValue(temp))


    return maxRes


    # 记忆化递归

    class Solution2(object):
    def maxCoins(self, nums):
    """
    :type nums: List[int]
    :rtype: int
    """
    self.res = 0

    if not nums:
    return self.res

    self.memo = {}
    self.res = self.getMaxValue(nums)


    print self.res
    return self.res

    def getMaxValue(self,nums):

    nLen = len(nums)

    if nLen == 1:

    key = tuple(nums)
    self.memo[key] = nums[0]
    return nums[0]


    key = tuple(nums)

    if self.memo.has_key(key):
    return self.memo[key]

    maxRes = 0

    for i in range(nLen):

    if i == 0 :
    temp = nums[0:]
    temp.pop(i)
    maxRes = max(maxRes,nums[i]*nums[i+1]+self.getMaxValue(temp))


    elif i == nLen-1:
    temp = nums[0:]
    temp.pop(i)
    maxRes = max(maxRes, nums[i] * nums[i-1]+self.getMaxValue(temp))


    else:
    temp = nums[0:]
    temp.pop(i)
    maxRes = max(maxRes, nums[i-1]* nums[i]*nums[i+1]+ self.getMaxValue(temp))

    self.memo[key] = maxRes
    return maxRes


    #动态规划
    # 见解题报告
    class Solution3(object):
    def maxCoins(self, nums):
    """
    :type nums: List[int]
    :rtype: int
    """





    s = Solution2()

    n1 = [3,1,5,8]


    n2 = [5,8]

    n3 = [3,5,8]

    n4 = [7,9,8,0,7,1,3,5,5,2,3]

    n5 = [8,3,4,3,5,0,5,6,6,2,8,5,6,2,3,8,3,5,1,0,2]

    s.maxCoins(n4)
  • 相关阅读:
    网络流之转换为对偶图
    BZOJ 1051: [HAOI2006]受欢迎的牛(SCC)
    BZOJ[HNOI2005]狡猾的商人(差分约束)
    BZOJ [ZJOI2007]矩阵游戏(二分图匹配)
    BZOJ 1191: [HNOI2006]超级英雄Hero(二分图匹配)
    BZOJ 1270: [BeijingWc2008]雷涛的小猫(DP)
    BZOJ 1303: [CQOI2009]中位数图
    BZOJ [HNOI2006]鬼谷子的钱袋
    BZOJ1002 [FJOI2007]轮状病毒(最小生成树计数)
    A* 算法讲解
  • 原文地址:https://www.cnblogs.com/lux-ace/p/10546583.html
Copyright © 2011-2022 走看看