- 921. Minimum Add to Make Parentheses Valid 使括号有效的最少添加
- 915. Partition Array into Disjoint Intervals 分割数组
- 932. Beautiful Array 漂亮数组
- 940. Distinct Subsequences II 不同的子序列 II
题目地址: https://leetcode.com/problems/burst-balloons/description/
Given n
balloons, indexed from 0
to n-1
. Each balloon is painted with a number on it represented by array nums
. You are asked to burst all the balloons. If the you burst balloon i
you will get nums[left] * nums[i] * nums[right]
coins. Here left
and right
are adjacent indices of i
. After the burst, the left
and right
then becomes adjacent.
Find the maximum coins you can collect by bursting the balloons wisely.
Note:
Example:
Input: [3,1,5,8]
Output: 167
Explanation: 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
打气球游戏,当我们打某个位置的气球的时候,能获得它左右两个气球上的分数和自身分数的乘积。问如何打气球能获得最多的分数?可以认为最左右两边隐含着分数为1不用打破的气球。
这个是个DP的题目,当然也可以通过记忆化搜索的方式解决。
令dfs(i, j) 和 c[i][j]是在第[i, j]闭区间上打破气球能获得最大值。那么,在其中找到一个不打破的气球k,则可以得到以下关系:
c[i][j] = max(c[i][j], self.dfs(nums, c, i, k - 1) + nums[i - 1] * nums[k] * nums[j + 1] + self.dfs(nums, c, k + 1, j))
含义是,我们找出在[i, k - 1]、[k + 1, j]闭区间打气球的分数最大值,然后会把第i - 1和第j + 1个气球保留下来,让这两个气球和第k个气球相乘,最后求三个加法。
模拟左右两边的气球的方法是直接添加上首尾各一个1,同时使用记忆化能加速不少,也为下一步的DP提供思路。
时间复杂度是O(N^2 * log(N))(不会算…),空间复杂度是O(N)。
class Solution(object):
def maxCoins(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
n = len(nums)
nums.insert(0, 1)
nums.append(1)
c = [[0] * (n + 2) for _ in range(n + 2)]
return self.dfs(nums, c, 1, n)
def dfs(self, nums, c, i, j):
if i > j: return 0
if c[i][j] > 0: return c[i][j]
if i == j: return nums[i - 1] * nums[i] * nums[i + 1]
res = 0
for k in range(i, j + 1):
res = max(res, self.dfs(nums, c, i, k - 1) + nums[i - 1] * nums[k] * nums[j + 1] + self.dfs(nums, c, k + 1, j))
c[i][j] = res
return c[i][j]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
第二种解法是使用DP。
DP一般都可以通过记忆化搜索来改出来,但是我不会。。很遗憾,参考了别人的代码,还是没搞懂。。
class Solution(object):
def maxCoins(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
n = len(nums)
nums.insert(0, 1)
nums.append(1)
dp = [[0] * (n + 2) for _ in range(n + 2)]
for len_ in range(1, n + 1):
for left in range(1, n - len_ + 2):
right = left + len_ - 1
for k in range(left, right + 1):
dp[left][right] = max(dp[left][right], dp[left][k - 1] + nums[left - 1] * nums[k] * nums[right + 1] + dp[k + 1][right])
return dp[1][n]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
参考资料:
http://www.cnblogs.com/grandyang/p/5006441.html https://www.youtube.com/watch?v=z3hu2Be92UA
DDKK.COM 弟弟快看-教程,程序员编程资料站,版权归原作者所有
本文经作者:负雪明烛 授权发布,任何组织或个人未经作者授权不得转发
题目地址: https://leetcode.com/problems/burst-balloons/description/ 题目描述: Given n balloons, indexed fr
我试图在移动设备上隐藏一个名为 balloon.css 的 CSS 文件。我正在使用这个 balloon.css:balloon.css 我的代码: @media only screen
我正在尝试使用 jQuery 实现此效果: 我需要: 确定 .project 是否在视口(viewport)中。 如果不是,我需要它从 0.3 缩放到 1,并在对象进入视口(viewport) 25%
我想在附加图片中绘制自定义云(系统气球)。可能吗? 最佳答案 QSystemTrayIcon类有一个简单的气球消息选项可用 ( QSystemTrayIcon::showMessage ) 但它只提供
为了这个我已经抓狂了...... 我已将 tkinter 应用程序配置为使用 tix,以便我可以利用 Balloon 小部件作为工具提示。然而,弹出的气球消息是非常丑陋的黄色,我一辈子都不知道如何设置
我正在从 CKEditor4 升级到 CKEditor5。我想拥有与之前相同的工具栏配置,但我不知道如何添加剪贴板功能(复制、剪切、粘贴等)。 我正在尝试将它们添加到 ckeditor5-build-
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Google Maps: How to create a custom InfoWindow? 我刚刚在 s
我从这里下载了 Balloons.playground,https://developer.apple.com/swift/blog/?id=9 Balloons.playground 是 WWDC
我正在尝试使用 balloon.js 显示气球。 https://urin.github.io/jquery.balloon.js/ 这是我的代码。 WRAP Bottom
我知道在 .NET 框架中有一些用于普通系统托盘图标“气球提示”的替代第三方控件,允许您更改颜色并向气球添加一些样式。 我想知道 Qt 是否有类似的东西,它允许从系统托盘图标更好地定制气球工具提示的外
我正在寻找 https://github.com/jgilfelt/android-mapviewballoons 的 C# 版本 此项目模仿 iOS MapAnnotions 对象,允许更轻松地将信
请推荐用于就地显示验证错误的 jQuery 插件,就像在 MobileMe 上一样: 我不想要的是完全成熟的验证插件(jQuery.validation 和类似的)。 我想要的是: 只有简单的 UI“
所以我有一个家庭作业是制作打印斐波那契数列前 N 项的算法流程图。当然,这并不难,但是老师告诉我们这可以用最少六个流程图“气球”来完成。这就是问题所在——我想这样做,但我似乎做不到……也就是说,我认为
当尝试运行应用程序时,我在终端上收到此错误 node balloons.js info - socket.io started Balloons.io started on port 8000
我正在玩“Balloons.playground”教程,当我尝试通过单击代码行旁边的圆圈将纹理添加到时间轴时 let textures: [SKTexture] = images.map { SKTe
如何制作标准气球,如新的重新制作的谷歌地图气球? 看图片: 新式气球: 旧式气球(我有): 我在哪里可以获得 CSS? 最佳答案 Google map 通常会先在自己的 map 中添加新功能,然后再在
根据 Netbeans 文档和选项 Pane ,启用即时评估气球会“破坏”Xdebug: https://netbeans.org/kb/docs/php/debugging.html 我还没有听说过
我在我的项目中实现了 Canvas 绘图。我想显示气泡,其中包含与 Canvas 上特定鼠标点击相关的信息。假设单击我的 Canvas 的特定区域会出现一个弹出窗口,其中提供有关 Canvas 上该区
我想创建自定义电子邮件撰写对话框,我需要实现“添加联系人”功能。就像在标准的 iOS 应用程序中一样。 我还没有找到任何漂亮的控件,所以它应该手动实现。 所以我想知道如何在 MT.D 元素内动态绘制这
我正在尝试使用 qtip2 jquery 插件制作带有内容的小提示框/气球。这是他们的 .js 和 .css 文件: http://qtip2.com/download 我希望它能够处理由来自 mys
我是一名优秀的程序员,十分优秀!