【C语言】Leetcode-312 戳气球

news2024/11/24 9:13:34

文章目录

  • 题目
  • 思路
  • 代码如下


题目

链接: Leetcode-312 戳气球

在这里插入图片描述


思路

我们观察戳气球的操作,发现这会导致两个气球从不相邻变成相邻,使得后续操作难以处理。于是我们倒过来看这些操作,将全过程看作是每次添加一个气球。

首先
我们需要创建一个 v a l val val 数组,用来存储所有的元素,其中 v a l [ 0 ] val[0] val[0] v a l [ n u m s S i z e + 1 ] val[numsSize+1] val[numsSize+1] 的位置用来存放两头的超出数组边界的1,剩下的从1开始就是 n u m s nums nums 数组里的元素

然后
我们定义 s o l v e solve solve 方法,令 s l o v e ( i , j ) slove(i,j) slove(i,j) 表示开区间 ( i , j ) (i,j) (i,j) 内的位置全部填满气球能够得到的最多硬币数。由于时开区间,因此区间两端的气球编号就是 v a l [ i [ val[i[ val[i[ v a l [ j ] val[j] val[j]

接着
我们要对这个 s l o v e slove slove 方法进行分类讨论

i > = j − 1 i >= j-1 i>=j1 时,开区间中没有气球, s l o v e ( i , j ) slove(i,j) slove(i,j) 的值为0

i < j − 1 i < j-1 i<j1 时,我们美剧开区间 ( i , j ) (i,j) (i,j) 内的全部位置 m i d mid mid ,令 m i d mid mid 为当前区间第一个添加的气球,该操作能得到的硬币数为 v a l [ i ] ∗ v a l [ m i d ] ∗ v a l [ j ] val[i] * val[mid] * val[j] val[i]val[mid]val[j]

同时我们利用递归,去计算分割出的两区间对 s o l v e ( i , j ) solve(i,j) solve(i,j) 的贡献,这三项之和的最大值,即为 s o l v e ( i , j ) solve(i,j) solve(i,j) 的值

还有
因为我们是利用递归将每种结果都计算出来,所以他的工程量是很大的,为了降低时间复杂度,我们可以建立一个二维数组,来根据 l e f t left left r i g h t right right 的值存放这个开区间内的最大贡献量

代码如下

int rec[302][302];
int val[302];

int solve(int left, int right) {
    if (left >= right - 1)
        return 0;
    if (rec[left][right] != -1)
        return rec[left][right];
    for (int i = left + 1; i < right; i++) {
        int sum = val[left] * val[i] * val[right];
        sum += solve(left, i) + solve(i, right);
        rec[left][right] = fmax(rec[left][right], sum);
    }
    return rec[left][right];
}

int maxCoins(int* nums, int numsSize) {
    memset(rec, -1, sizeof(rec));
    val[0] = val[numsSize + 1] = 1;
    for (int i = 1; i <= numsSize; i++) {
        val[i] = nums[i - 1];
    }
    return solve(0, numsSize + 1);
}

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

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

相关文章

社交“学习伙伴”:Meta Llama助力对话升级

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

【数据结构】排序——插入排序,选择排序

前言 本篇博客我们正式开启数据结构中的排序&#xff0c;说到排序&#xff0c;我们能联想到我之前在C语言博客中的冒泡排序&#xff0c;它是排序中的一种&#xff0c;但实现效率太慢&#xff0c;这篇博客我们介绍两种新排序&#xff0c;并好好深入理解排序 &#x1f493; 个人主…

HCIA--NAT地址转换(复习)

先交换后路由&#xff1a; 1&#xff1a;在交换机上创建vlan&#xff0c;进入接口划分vlan&#xff0c;接着在交换机连接路由器的接口上建立trunk干道 2&#xff1a;在路由器上&#xff0c;先配置物理接口IP&#xff0c;接着在路由器上创建两个子接口&#xff0c;将建立的vla…

100道面试必会算法-32-二叉树右视图用栈实现队列

100道面试必会算法-32-二叉树右视图&用栈实现队列 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4] 输出: [1,3,4]示例 2: 输入: [1,n…

powershell:使用IProgressDialog接口创建windows标准进度对话框。

禁止任何形式的抄录&#xff0c;转载请附上本文章地址 Add-Type using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Runtime.InteropServices; // 定义ProgressDialog类&#xff0c;实现IProgressDialog接口 …

数据库之PostgreSQL详解

一、PostgreSQL介绍 PostgreSQL是一个功能强大的 开源 的关系型数据库。底层基于C实现。 PostgreSQL的开源协议和Linux内核版本的开源协议是一样的。。BDS协议&#xff0c;这个协议基本和MIT开源协议一样&#xff0c;说人话&#xff0c;就是你可以对PostgreSQL进行一些封装&a…

K210视觉识别模块学习笔记5:(嘉楠)训练使用模型_识别人脸

今日开始学习K210视觉识别模块:(嘉楠)训练与使用模型_识别人脸 亚博智能的K210视觉识别模块...... 固件库版本: canmv_yahboom_v2.1.1.bin 之前的训练网址部署模型时需要我们自己更换固件&#xff0c;而且还不能用亚博的图像操作库函数了&#xff0c;这十分不友好&#xff0…

vue3关于配置代码检查工作流,husky出现创建错误问题的解决方法

关于配置代码检查工作流&#xff0c;husky出现error: cant create hook, .husky directory doesnt exist (try running husky install) 首先根据截图发现最明显的信息是error&#xff0c;中文译为-----错误&#xff1a;无法创建钩子&#xff0c;.husky 目录不存在&#xff08;尝…

【数据结构】十二、八种常用的排序算法讲解及代码分享

目录 一、插入排序 1)算法思想 2&#xff09;代码 二、希尔排序 1&#xff09;算法思想 2&#xff09;代码 三、选择排序 1&#xff09;算法思想 2&#xff09;代码 四、堆排序 1&#xff09;什么是最大堆 2&#xff09;如何创建最大堆 3&#xff09;算法思想 4&a…

Databricks Data Warehouse

Warehouse features 原来的data warehouse痛点&#xff1a; 用例不兼容的支持模型的安全和管理不兼容不相交和重复的数据 ETL workloads Streaming Architecture Data Science and ML

演讲全文|林涛:MongoDB助力智能制造出海控本增效

5月29日-30日在上海世博中心举办的亚马逊云科技中国峰会圆满结束。本文整理了MongoDB北亚区方案与咨询总监林涛在白金讲堂的演讲全文&#xff0c;就《MongoDB助力智能制造出海控本增效》话题与大家共同探讨。 白金讲堂演讲视频 从全球经济竞争的角度看&#xff0c;中国制造业…

原来你长这个样子啊,Java字节码文件

字节码文件 字节码文件是一种二进制文件&#xff0c;扩展名为.class 通过 javac 将源码编译得到&#xff0c;是一种中间形式的代码&#xff0c;这种中间形式的代码让Java有了“一次编译&#xff0c;多次运行”的跨平台特点。 字节码文件的组成 由5大组成部分&#xff1a;基础…

【SQLAlChemy】如何连接数据库?

使用SQLAlChemy连接数据库 导入包 首先&#xff0c;导入创建数据库引擎的包。 from sqlalchemy import create_engine编写数据库配置 SQLALCHEMY_DATABASE_URL "mysql://root:123456789127.0.0.1:3306/tortoise"字段解释&#xff1a; mysql:&#xff1a;这是数…

Python第二语言(七、Python模块)

目录 1. 什么是模块 2. 基本语法 2.1 模块的导入方式 2.2 基本语法 import 模块名 2.3 基本语法 from 模块名 import 功能名 2.4 基本语法as 别名 3. 自定义模块 4. 调用自定义模块时&#xff0c;如何让其模块中的函数不被调用&#xff08;__name__&#xff09; 5. 调…

fl studio怎么设置中文及 2024年最新fl studio选购指南

FL Studio让你的计算机就像是全功能的录音室&#xff0c;漂亮的大混音盘&#xff0c;先进的创作工具&#xff0c;让你的音乐突破想象力的限制。zol提供FL Studio中文版下载。 FL Studio中文版下载软件简介 FL Studio 让你的计算机就像是全功能的录音室&#xff0c;漂亮的大混…

Linux的网络配置

查看网络配置命令 一、查看所有活动的网络接口信息 ifconfig ifconfig 展示的是当前设备正在工作的网卡&#xff08;启动的设备&#xff09; ifconfig -a 展示所有的网络设备 ifconfig ens33 查看指定网卡设备 ifconfig ens33 down 关闭网卡 或者 ifdown ens33 &#xff0…

论文阅读KAN: Kolmogorov–Arnold Networks

学习了最近大热的KAN网络 论文地址&#xff1a;https://arxiv.org/pdf/2404.19756 按我个人读论文的习惯总结了如下几点&#xff1a; 1&#xff0c;背景&#xff1a; 1&#xff09;灵感来源&#xff1a;于Kolmogorov-Arnold表示定理&#xff0c;也就是多变量连续函数可以表…

大模型常用推理参数工作原理

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 do_sample do_sample 参数控制是否使用采样…

戴尔R720服务器(3)组RAID

今天收到7块硬盘&#xff0c;现在共有8块硬盘了&#xff0c;找了个视频学习了怎么使用阵列卡组RAID并记录。 ​​ ‍ 视频参考&#xff1a;【戴尔服务器添加RAID5热备盘hotspare】 ‍ 阵列卡组RAID5 开始 连接iDRAC控制台服务器开机按F2进入BIOS选择Device Settings​ ​​…

知识图谱的应用---智能电网

文章目录 智能电网典型应用 智能电网 智能电网以物理电网为基础&#xff0c;将现代先进的传感测量技术、通讯技术、信息技术、计算机技术和控制技术与物理电网高度集成而形成的新型电网。它以充分满足用户对电力的需求和优化资源配置、确保电力供应的安全性、可靠性和经济性、满…