最好的科技资讯网站,电子商务网站调研报告,网站建设三把火科技,新手如何制作网站题目描述
有 n 个气球#xff0c;编号为0 到 n - 1#xff0c;每个气球上都标有一个数字#xff0c;这些数字存在数组 nums 中。
现在要求你戳破所有的气球。戳破第 i 个气球#xff0c;你可以获得 nums[i - 1] * nums[i] * nums[i 1] 枚硬币。 这里的 i - 1 和 i 1 代…题目描述
有 n 个气球编号为0 到 n - 1每个气球上都标有一个数字这些数字存在数组 nums 中。
现在要求你戳破所有的气球。戳破第 i 个气球你可以获得 nums[i - 1] * nums[i] * nums[i 1] 枚硬币。 这里的 i - 1 和 i 1 代表和 i 相邻的两个气球的序号。如果 i - 1或 i 1 超出了数组的边界那么就当它是一个数字为 1 的气球。
求所能获得硬币的最大数量。
示例 1
输入nums [3,1,5,8]
输出167
解释
nums [3,1,5,8] -- [3,5,8] -- [3,8] -- [8] -- []
coins 3*1*5 3*5*8 1*3*8 1*8*1 167
示例 2
输入nums [1,5]
输出10
思路
动态规划
参考1:. - 力扣LeetCode学习引入k的思路
参考2:. - 力扣LeetCode学习i,j,k各自for循环的范围
class Solution(object):def maxCoins(self, nums)::type nums: List[int]:rtype: intn len(nums)nums [1]nums[1]dp [[0]*len(nums) for _ in range(len(nums))]for i in range(n,-1,-1):for j in range(i1,n2):for k in range(i1,j):dp[i][j] max(dp[i][j], dp[i][k]dp[k][j]nums[i]*nums[k]*nums[j])return dp[0][n1]if __name__ __main__:sSolution()nums [3, 1, 5, 8]print(s.maxCoins(nums))