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)
  • 相关阅读:
    Licp
    [持续更新]Python 笔记
    求 LCA 的三种方法
    一些题目(4)
    欧几里得算法与扩展欧几里得算法
    最近打的三场比赛的总结
    10day2
    10day1
    chrome谷歌浏览器插件制作简易教程
    nodejs net模块
  • 原文地址:https://www.cnblogs.com/lux-ace/p/10546583.html
Copyright © 2011-2022 走看看