LeetCode 956. 最高的广告牌(DP)
文章目录
- 1. 题目
- 2. 解题
1. 题目
你正在安装一个广告牌,并希望它高度最大。
这块广告牌将有两个钢制支架,两边各一个。每个钢支架的高度必须相等。
你有一堆可以焊接在一起的钢筋 rods。
举个例子,如果钢筋的长度为 1、2 和 3,则可以将它们焊接在一起形成长度为 6 的支架。
返回广告牌的最大可能安装高度。如果没法安装广告牌,请返回 0。
示例 1:
输入:[1,2,3,6]
输出:6
解释:我们有两个不相交的子集 {1,2,3} 和 {6},它们具有相同的和 sum = 6。示例 2:
输入:[1,2,3,4,5,6]
输出:10
解释:我们有两个不相交的子集 {2,3,5} 和 {4,6},它们具有相同的和 sum = 10。示例 3:
输入:[1,2]
输出:0
解释:没法安装广告牌,所以返回 0。提示:
0 <= rods.length <= 20
1 <= rods[i] <= 1000
钢筋的长度总和最多为 5000
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/tallest-billboard
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
dp[i][j]
表示处理完 i 钢筋,两边差距为 j 时,可以组成的最大高度
class Solution {public:int tallestBillboard(vector<int>& rods) {if(rods.size() <= 1)return 0;int dp[20][5001], n = rods.size();int total = accumulate(rods.begin(), rods.end(), 0);// dp[i][j] 表示处理完 i 支架,两边差距为 j 时,可以组成的最大高度memset(dp, -1, sizeof(dp));dp[0][rods[0]] = dp[0][0] = 0;for(int i = 1; i < rods.size(); i++) { //样本维度for(int j = 0; j <= total; ++j){if(dp[i-1][j] == -1)//上一行状态不存在continue;// 当前钢筋不要,丢弃dp[i][j] = max(dp[i][j], dp[i-1][j]);// 当前钢筋,加在长的一边dp[i][j+rods[i]] = max(dp[i][j+rods[i]], dp[i-1][j]);// 当前钢筋,加在短的一边,现在高度差为 abs(j-rods[i])dp[i][abs(j-rods[i])] = max(dp[i][abs(j-rods[i])], dp[i-1][j]+min(j, rods[i]));}}// 返回高度差为 0 的情况return dp[n-1][0]==-1 ? 0 : dp[n-1][0];}
};
40 ms 8.1 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
LeetCode 956. 最高的广告牌(DP)相关推荐
- 956. 最高的广告牌
956. 最高的广告牌 你正在安装一个广告牌,并希望它高度最大.这块广告牌将有两个钢制支架,两边各一个.每个钢支架的高度必须相等. 你有一堆可以焊接在一起的钢筋 rods.举个例子,如果钢筋的长度为 ...
- LeetCode 85. 最大矩形(DP/单调递增栈,难)
文章目录 1. 题目 2. 解题 2.1 DP 2.2 单调递增栈 1. 题目 给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积. 示例: 输入: [[" ...
- LeetCode 221. 最大正方形(DP)
文章目录 1. 题目信息 2. 解题 1. 题目信息 在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积. 示例: 来源:力扣(LeetCode) 链接:https:/ ...
- LeetCode 1105. 填充书架(DP)
文章目录 1. 题目 2. 解题 1. 题目 附近的家居城促销,你买回了一直心仪的可调节书架,打算把自己的书都整理到新的书架上. 你把要摆放的书 books 都整理好,叠成一摞:从上往下,第 i 本书 ...
- LeetCode 656. 金币路径(DP)
文章目录 1. 题目 2. 解题 1. 题目 给定一个数组 A(下标从 1 开始)包含 N 个整数:A1,A2,--,AN 和一个整数 B. 你可以从数组 A 中的任何一个位置(下标为 i)跳到下标 ...
- LeetCode 1230. 抛掷硬币(DP)
文章目录 1. 题目 2. 解题 1. 题目 有一些不规则的硬币.在这些硬币中,prob[i] 表示第 i 枚硬币正面朝上的概率. 请对每一枚硬币抛掷 一次,然后返回正面朝上的硬币数等于 target ...
- LeetCode 174. 地下城游戏(DP)
文章目录 1. 题目 2. 解题 1. 题目 一些坏人抓住了公主(P)并将她关在了地下城的右下角. 地下城是由 M x N 个房间组成的二维网格. 我们英勇的骑士(K)最初被安置在左上角的房间里, 他 ...
- LeetCode 256. 粉刷房子(DP)
文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成红色.蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其与相邻的两个房子颜色不能相同. 当然,因 ...
- LeetCode 97. 交错字符串(DP)
1. 题目 给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的. 示例 1: 输入: s1 = "aabcc", s2 = "dbb ...
最新文章
- QCon2016旧金山大会焦点分享者确认
- 独家 | ​多项式回归:从零开始学习梯度下降
- 2.1.5 梯度检验
- 【技术综述】深度学习中的数据增强方法都有哪些?
- 2017甲骨文JavaOne参会感想
- TCP协议的粘包问题(数据的无边界性)
- iOS五种本地缓存数据方式
- java程会释放锁join_关于join() 是否会释放锁的一些思考
- java c 客户端_java基于C/S模式实现聊天程序(客户端)
- Mysql 查看版本号
- HTML转图片利器:wkhtmltox
- 保护个人信息,才能享受大数据的时代成果
- 【stm32f103中断编程步骤】
- 【DKN】(二)config.py
- 动态规划---01背包问题详解
- SuperData最新报告:2017年VR硬件营收将达到36亿美元
- 加载页面前执行js脚本,实现浏览器指纹变更
- 可信数智云,联通云的个性化标签
- 天龙八部手游服务器找不到了,为什么天龙八部手游同样版本,区跟服务器都会 – 手机爱问...
- 【程序员讲婚庆】找婚庆公司的渠道和问的内容
热门文章
- opencv 星空_opencv如何将大于5000像素点的轮廓绘制出来?
- tornado学习笔记day04-执行顺序
- 【Python】模拟面试技术面试题答
- python+Tesseract-OCR实现图片识别(只适合新手)
- 对象的初始状态(构造函数)
- python 重载的实现(single-dispatch generic function)
- 非法操作 login.php,阅文游戏中心 h5游戏接入wiki
- git管理账户忘记了_强制找回GitLab管理员账户密码的方法
- 使用webpack配置react并添加到flask应用
- Java 删除ArrayList中重复元素,保持顺序