C++算法: 戳气球

news2024/11/20 18:36:19

题目

有 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 = 315 + 358 + 138 + 181 = 167
示例 2:
输入:nums = [1,5]
输出:10
参数范围
n == nums.length
1 <= n <= 300
0 <= nums[i] <= 100

2023年一月版本

class Solution {
public:
int maxCoins(vector& nums) {
int iMax = 0;
m_c = nums.size();
vector<vector> dp;
dp.assign(m_c+1, vector(m_c));
for (int len = 1; len <= m_c; len++)
{
for (int c = 0; c + len - 1 < m_c; c++)
{
//计算dp[len][c]
//m是最后的气球,这样保证可以拆分两个子项
for (int m = c; m <= c + len - 1; m++)
{
int iSource = GetSource(nums, m,c-1,c+len);
if (m > c)
{
iSource += dp[m - c][c];
}
if (m < c + len - 1)
{
iSource += dp[c + len - 1 - m][m + 1];
}
dp[len][c] = max(dp[len][c], iSource);
}
}
}
return dp[m_c][0];
}
int GetSource(const vector& nums,int c,int iLeft,int iRight)
{
int iScource = nums[c];
if (iLeft >= 0)
{
iScource *= nums[iLeft];
}
if (iRight < m_c)
{
iScource *= nums[iRight];
}
return iScource;
}
int m_c;
};

2023年5月版

class Solution {
public:
int maxCoins(vector& nums) {
nums.insert(nums.begin(), 1);
nums.emplace_back(1);
m_c = nums.size();
//dp[len][iBegin]表示iBegin开始长度为len的区间,消除得剩余首尾2个元素获得的积分
vector<vector> dp(m_c + 1, vector(m_c, 0));
for (int len = 3; len <= m_c; len++)
{
for (int begin = 0; begin + len - 1 < m_c; begin++)
{
const int end = begin + len - 1;
for (int mid = begin + 1; mid < end; mid++)
{
const int leftLen = mid - begin + 1;
const int rightLen = len - leftLen + 1;
const int iNew = dp[leftLen][begin] + nums[begin] * nums[mid] * nums[end] + dp[rightLen][mid];
dp[len][begin] = max(dp[len][begin], iNew);
}
}
}
return dp.back()[0];
}
int m_c;
};

扩展阅读

视频课程

有效学习:明确的目标 及时的反馈 拉伸区(难度合适),可以先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771

如何你想快速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176

相关下载

想高屋建瓴的学习算法,请下载《闻缺陷则喜算法册》doc版
https://download.csdn.net/download/he_zhidan/88348653

鄙人想对大家说的话
闻缺陷则喜是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。
墨家名称的来源:有所得以墨记之。
如果程序是一条龙,那算法就是他的是睛

测试环境

操作系统:win7 开发环境: VS2019 C++17
或者 操作系统:win10 开发环境: VS2022 C++17

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1154744.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JS逆向爬虫---请求参数加密① 【某度翻译】

接口定位 抓包输入翻译关键词 全局搜索关键词,定位到接口https://fanyi.baidu.com/v2transapi 全局搜索sign 多次尝试定位变化参数sign 断点调试b函数 估值整个function&#xff0c;并测试函数运行结果 缺少r参数&#xff0c;可以通过多次输入调试&#xff0c;定位r参数的…

阿里云2023年双11活动,2核2G云服务器1年99元,新老用户同享!

阿里云2023年双11活动已经正式开启了&#xff0c;阿里云推出了金秋云创季活动&#xff0c;活动力度很大&#xff0c;多款热门云产品超低折扣&#xff0c;2核2G云服务器1年99元&#xff0c;续费不涨价&#xff0c;新老用户同享&#xff01; 一、阿里云双11活动地址 活动入口&am…

监控浏览器页面展示性能的工具

B/S架构&#xff0c;用户都是使用浏览器访问后端服务&#xff0c;产品在开发时需要关注用户的体验&#xff0c;不仅包含交互的友好&#xff0c;性能指标也非常重要。对于后端开发常见的性能指标&#xff0c;可能包含&#xff1a;reponse time&#xff0c;吞吐量等。此外&#x…

360加固APP后启动崩溃—注意加固前后签名是否一致

如下截图所示&#xff0c;我今天就是遇到了这个问题&#xff0c;这个问题是比较好解决&#xff0c;但如果官网有显眼指引说明会不会对开发者更友好些呢&#xff1f; 首先我们给360的加固包是带有自己的签名的&#xff0c;然后经360加固过后&#xff08;免费的加固服务&#xf…

【JavaEE】cookie和session

cookie和session cookie什么是 cookieServlet 中使用 cookie相应的API Servlet 中使用 session 相应的 API代码示例: 实现用户登陆Cookie 和 Session 的区别总结 cookie 什么是 cookie cookie的数据从哪里来? 服务器返回给浏览器的 cookie的数据长什么样? cookie 中是键值对…

[ poi-表格导出 ] java.lang.NoClassDefFoundError: org/apache/poi/POIXMLTypeLoader

解决报错&#xff1a; org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: org/apache/poi/POIXMLTypeLoader 报错描述&#xff1a; 表格导出本来使用正常&#xff0c;偶然就报了以上错误…

ai问答网站有哪些

1、Mental AI MentalAI&#xff08;https://ai.ciyundata.com/&#xff09;是一种基于星火大模型和文心大模型的知识增强大语言模型&#xff0c;专注于自然语言处理&#xff08;NLP&#xff09;领域的技术研发。 它具备强大的语义理解和生成能力&#xff0c;能够处理各种复杂的…

KaiwuDB 获山东省工信厅“信息化应用创新优秀解决方案”奖

10月23日&#xff0c;山东省工信厅正式公示《2023年山东省信息化应用创新典型应用案例及优秀解决方案名单》&#xff0c;面向全省、全国重点推荐山东省技术水平先进、应用示范效果突出、产业带动性强的信息化解决方案及应用实践&#xff0c;对于进一步激发山东省信息技术产业创…

一文速通 StarRocks 数据库:核心概念、架构与特性

Author: Xinyao Tian 概述 本文档简要梳理了 StarRocks 的基本信息。 简介 Introduction StarRocks 是面向下个时代的&#xff0c;高性能的数据分析仓库。其提供了实时、多维度、高并发的数据分析能力。 StarRocks is a next-gen, high-performance analytical data warehou…

C#和HttpClient结合示例:微博热点数据分析

概述 微博是中国最大的社交媒体平台之一&#xff0c;它每天都会发布各种各样的热点话题&#xff0c;反映了网民的关注点和舆论趋势。本文将介绍如何使用C#语言和HttpClient类来实现一个简单的爬虫程序&#xff0c;从微博网站上抓取热点话题的数据&#xff0c;并进行一些基本的…

9. linux系统设置开机自启动发射热点

1. 说明 某种情况下需要使用wifi进行通信时&#xff0c;可以在linux系统中发射一个热点让以使别的设备能够连接&#xff0c;然后进行通信。一般情况下可以在有无线wifi发射器的情况下&#xff0c;每次linux系统开机后&#xff0c;手动设置开启热点&#xff0c;但这种方式比较麻…

打造美团外卖新体验,HarmonyOS SDK持续赋能开发者共赢鸿蒙生态

从今年8月起&#xff0c;所有升级到HarmonyOS 4的手机用户在美团外卖下单后&#xff0c;可通过屏幕上的一个“小窗口”&#xff0c;随时追踪到“出餐、取餐、送达”等订单状态。这个能让用户实时获悉订单进度的神奇“小窗口”&#xff0c;就是实况窗功能。 实况窗&#xff1a;简…

githu访问慢解决方法-mac系统

1.访问链接&#xff1a;https://site.ip138.com/github.global.ssl.fastly.net/ 2.分别输入github.com&#xff0c;github.global.ssl.fastly.net进行ip解析 3.打开host文件 sudo vim /etc/hosts4.将在2步骤中的信息添加到host文件中 20.205.243.166 gith…

AI芯片2022-架构师(六十五)

1、AI芯片是当前人工智能技术发展的核心技术&#xff0c;其能力要支持训练和推理。通常&#xff0c;AI芯片的技术架构包括&#xff08;&#xff09;第三种。 A、GPU、FPGA、ASIC B、CPU、PPGA、DSP C、GPU、CPU、ASIC D、GPU、FPGA、SOC 解析&#xff1a; GPU图形处理&am…

信号完整性分析基础知识之有损传输线、上升时间衰减和材料特性(七):有损传输线的衰减

当正弦波信号沿着传输线传播时&#xff0c;电压幅度呈指数下降。总衰减&#xff08;以 dB 为单位&#xff09;随长度线性增加。在 FR4 中&#xff0c;1 GHz 信号的典型衰减可能为 0.1 dB/英寸。在传播1英寸时&#xff0c;衰减为0.1dB&#xff0c;信号幅度已下降至在传播 10 英寸…

逻辑漏洞挖掘之CSRF漏洞原理分析及实战演练 | 京东物流技术团队

一、前言 2月份的1.2亿条用户地址信息泄露再次给各大公司敲响了警钟&#xff0c;数据安全的重要性愈加凸显&#xff0c;这也更加坚定了我们推行安全测试常态化的决心。随着测试组安全测试常态化的推进&#xff0c;有更多的同事对逻辑漏洞产生了兴趣&#xff0c;本系列文章旨在…

QCustomPlot 瀑布图色度条

1、单独应用在一个QWidget中。 通过新建一个瀑布图后移除瀑布图即可只留住色度条。 QCustomPlot *customPlot ui->widget;QCPColorScale *colorScale new QCPColorScale(customPlot);customPlot->plotLayout()->addElement(0, 1, colorScale); // add it to the ri…

龙迅LT2611UXC 双PORT LVDS转HDMI(2.0)+音频

.描述&#xff1a; LT2611UXC是一个高性能的LVDS到HDMI2.0的转换器&#xff0c;用于STB&#xff0c;DVD应用程序。 LVDS输入可配置为单端口或双端口&#xff0c;有1个高速时钟通道&#xff0c;3~4个高速数据通道&#xff0c;最大运行1.2Gbps/通道&#xff0c;可支持高达9.6Gb…

Android 10适配外部存储方案

Android Api 29 对文件和文件夹进行了重大更改。不允许使用外部存储&#xff0c;如下方法&#xff1a; Environment.getExternalStorageDirectory() /mnt/sdcard Environment.getExternalStoragePublicDirectory(“test”) /mnt/sdcard/test 只能使用内部存储 getExterna…

实用篇-Linux

一、Linux介绍 linux特点 免费开源多用户多任务 Linux系统版本分为内核版和发行版 发行版是基于内核版进行扩展&#xff0c;由各个Linux厂商开发和维护&#xff0c;因为我们真正使用linux最终安装的其实是linux的发行版 下面以CentOS为例来学习Linux 二、Linux安装 安装方式…