文章目录

  • 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)相关推荐

  1. 956. 最高的广告牌

    956. 最高的广告牌 你正在安装一个广告牌,并希望它高度最大.这块广告牌将有两个钢制支架,两边各一个.每个钢支架的高度必须相等. 你有一堆可以焊接在一起的钢筋 rods.举个例子,如果钢筋的长度为 ...

  2. LeetCode 85. 最大矩形(DP/单调递增栈,难)

    文章目录 1. 题目 2. 解题 2.1 DP 2.2 单调递增栈 1. 题目 给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积. 示例: 输入: [[" ...

  3. LeetCode 221. 最大正方形(DP)

    文章目录 1. 题目信息 2. 解题 1. 题目信息 在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积. 示例: 来源:力扣(LeetCode) 链接:https:/ ...

  4. LeetCode 1105. 填充书架(DP)

    文章目录 1. 题目 2. 解题 1. 题目 附近的家居城促销,你买回了一直心仪的可调节书架,打算把自己的书都整理到新的书架上. 你把要摆放的书 books 都整理好,叠成一摞:从上往下,第 i 本书 ...

  5. LeetCode 656. 金币路径(DP)

    文章目录 1. 题目 2. 解题 1. 题目 给定一个数组 A(下标从 1 开始)包含 N 个整数:A1,A2,--,AN 和一个整数 B. 你可以从数组 A 中的任何一个位置(下标为 i)跳到下标 ...

  6. LeetCode 1230. 抛掷硬币(DP)

    文章目录 1. 题目 2. 解题 1. 题目 有一些不规则的硬币.在这些硬币中,prob[i] 表示第 i 枚硬币正面朝上的概率. 请对每一枚硬币抛掷 一次,然后返回正面朝上的硬币数等于 target ...

  7. LeetCode 174. 地下城游戏(DP)

    文章目录 1. 题目 2. 解题 1. 题目 一些坏人抓住了公主(P)并将她关在了地下城的右下角. 地下城是由 M x N 个房间组成的二维网格. 我们英勇的骑士(K)最初被安置在左上角的房间里, 他 ...

  8. LeetCode 256. 粉刷房子(DP)

    文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成红色.蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其与相邻的两个房子颜色不能相同. 当然,因 ...

  9. LeetCode 97. 交错字符串(DP)

    1. 题目 给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的. 示例 1: 输入: s1 = "aabcc", s2 = "dbb ...

最新文章

  1. QCon2016旧金山大会焦点分享者确认
  2. 独家 | ​多项式回归:从零开始学习梯度下降
  3. 2.1.5 梯度检验
  4. 【技术综述】深度学习中的数据增强方法都有哪些?
  5. 2017甲骨文JavaOne参会感想
  6. TCP协议的粘包问题(数据的无边界性)
  7. iOS五种本地缓存数据方式
  8. java程会释放锁join_关于join() 是否会释放锁的一些思考
  9. java c 客户端_java基于C/S模式实现聊天程序(客户端)
  10. Mysql 查看版本号
  11. HTML转图片利器:wkhtmltox
  12. 保护个人信息,才能享受大数据的时代成果
  13. 【stm32f103中断编程步骤】
  14. 【DKN】(二)config.py
  15. 动态规划---01背包问题详解
  16. SuperData最新报告:2017年VR硬件营收将达到36亿美元
  17. 加载页面前执行js脚本,实现浏览器指纹变更
  18. 可信数智云,联通云的个性化标签
  19. 天龙八部手游服务器找不到了,为什么天龙八部手游同样版本,区跟服务器都会 – 手机爱问...
  20. 【程序员讲婚庆】找婚庆公司的渠道和问的内容

热门文章

  1. opencv 星空_opencv如何将大于5000像素点的轮廓绘制出来?
  2. tornado学习笔记day04-执行顺序
  3. 【Python】模拟面试技术面试题答
  4. python+Tesseract-OCR实现图片识别(只适合新手)
  5. 对象的初始状态(构造函数)
  6. python 重载的实现(single-dispatch generic function)
  7. 非法操作 login.php,阅文游戏中心 h5游戏接入wiki
  8. git管理账户忘记了_强制找回GitLab管理员账户密码的方法
  9. 使用webpack配置react并添加到flask应用
  10. Java 删除ArrayList中重复元素,保持顺序