【LeetCode:1402. 做菜顺序 | 动态规划 + 贪心】

news2024/11/19 1:22:30

在这里插入图片描述

🚀 算法题 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,CSDN-Java领域新星创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 算法题 🚀

在这里插入图片描述

在这里插入图片描述

🍔 目录

    • 🚩 题目链接
    • ⛲ 题目描述
    • 🌟 求解思路&实现代码&运行结果
      • ⚡ 动态规划 + 贪心
        • 🥦 求解思路
        • 🥦 实现代码 - 缓存
        • 🥦 运行结果
        • 🥦 实现代码 - 动态规划
        • 🥦 运行结果
    • 💬 共勉

🚩 题目链接

  • 1402. 做菜顺序

⛲ 题目描述

一个厨师收集了他 n 道菜的满意程度 satisfaction ,这个厨师做出每道菜的时间都是 1 单位时间。

一道菜的 「 like-time 系数 」定义为烹饪这道菜结束的时间(包含之前每道菜所花费的时间)乘以这道菜的满意程度,也就是 time[i]*satisfaction[i] 。

返回厨师在准备了一定数量的菜肴后可以获得的最大 like-time 系数 总和。

你可以按 任意 顺序安排做菜的顺序,你也可以选择放弃做某些菜来获得更大的总和。

示例 1:

输入:satisfaction = [-1,-8,0,5,-9]
输出:14
解释:去掉第二道和最后一道菜,最大的 like-time 系数和为 (-11 + 02 + 5*3 = 14) 。每道菜都需要花费 1 单位时间完成。
示例 2:

输入:satisfaction = [4,3,2]
输出:20
解释:可以按照任意顺序做菜 (21 + 32 + 4*3 = 20)
示例 3:

输入:satisfaction = [-1,-4,-5]
输出:0
解释:大家都不喜欢这些菜,所以不做任何菜就可以获得最大的 like-time 系数。

提示:

n == satisfaction.length
1 <= n <= 500
-1000 <= satisfaction[i] <= 1000

🌟 求解思路&实现代码&运行结果


⚡ 动态规划 + 贪心

🥦 求解思路
  1. 通过理解题目的意思,我们首先知道,可以以任意顺序做菜,其次,我们举几个例子就会发现,如果想要最后的结果大,可以把满意程度大的放到最后来完成。
  2. 为什么呢?一方面是数组中的元素本身就大,另外一方面,放到最后,时间也会很长。如果我们想要最后的结果很大,与这俩个变量又密切的关系。
  3. 其次,就是我们的动态规划,该题目的原型是0-1背包模型。不会的同学可以看看,此处不做过多的讲解。
  4. 具体求解的过程步骤请看下面代码。
🥦 实现代码 - 缓存
class Solution {
    int[][] dp;
    public int maxSatisfaction(int[] satisfaction) {
        Arrays.sort(satisfaction);
        int n=satisfaction.length;
        dp=new int[n+1][n+1];
        for(int i=0;i<=n;i++){
            Arrays.fill(dp[i],-1);
        }
        return process(0,0,satisfaction);
    }

    public int process(int i,int cnt,int[] satisfaction){
        if(i>=satisfaction.length){
            return 0;
        }
        if(dp[i][cnt]!=-1) return dp[i][cnt];
        int p1=0,p2=0;
        for(int j=0;j<=i;j++){
            p1=process(i+1,cnt+1,satisfaction)+(cnt+1)*satisfaction[j];
            p2=process(i+1,cnt,satisfaction);
        }
        return dp[i][cnt]=Math.max(p1,p2);
    }
}



🥦 运行结果

在这里插入图片描述

🥦 实现代码 - 动态规划
class Solution {

    int[][] dp;
    
    public int maxSatisfaction(int[] satisfaction) {
        Arrays.sort(satisfaction);
        int n=satisfaction.length;
        dp=new int[n+1][n+1];
        for(int i=0;i<=n;i++){
            dp[n][i]=0;
        }  
        for(int i=n-1;i>=0;i--){
            int p1=0,p2=0;
            for(int cnt=n-1;cnt>=0;cnt--){
                p1=dp[i+1][cnt+1]+(cnt+1)*satisfaction[i];
                p2=dp[i+1][cnt];
                dp[i][cnt]=Math.max(p1,p2);
            }
        }
        return dp[0][0];
    }
}



🥦 运行结果

在这里插入图片描述


💬 共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

【Kotlin精简】第5章 简析DSL

1 DSL是什么&#xff1f; Kotlin 是一门对 DSL 友好的语言&#xff0c;它的许多语法特性有助于 DSL 的打造&#xff0c;提升特定场景下代码的可读性和安全性。本文将带你了解 Kotlin DSL 的一般实现步骤&#xff0c;以及如何通过 DslMarker &#xff0c; Context Receivers 等…

音乐制作软件 Studio One 6 mac中文版软件特点

Studio One mac是一款专业的音乐制作软件&#xff0c;该软件提供了全面的音频编辑和混音功能&#xff0c;包括录制、编曲、合成、采样等多种工具&#xff0c;可用于制作各种类型的音乐&#xff0c;如流行音乐、电子音乐、摇滚乐等。 Studio One mac软件特点 1. 直观易用的界面&…

Spring中静态代理设计模式

目录 一、为什么需要代理设计模式 二、代理设计模式 三、静态代理设计模式 3.1 存在的问题 一、为什么需要代理设计模式 在项目的开发过程中我们知道service层是整个项目中最重要的部分&#xff0c;在service中一般会有两个部分&#xff0c;一个是核心业务&#xff0c;一个是额…

DJYROS产品:基于DJYOS的国产自主割草机器人解决方案

基于都江堰泛计算操作系统的国产自主机器人操作系统即将发布…… 1、都江堰机器人操作系统命名&#xff1a;DJYROS 2、机器人算法&#xff1a;联合行业自主机器人厂家&#xff0c;构建机器人算法库。 3、机器人芯片&#xff1a;联合行业机器人AI芯片公司&#xff0c;构建专用…

电商API是何时?以什么姿态开启了它的时代?

说到API&#xff0c;非业内技术人士&#xff0c;大家似乎对它还是知之甚少。 但如果有关注这个领域&#xff0c;其实不难发现&#xff0c;国内一些所谓大厂已经在电商API接口方面做了不少动作&#xff0c;不论是对外宣称的API生态&#xff0c;还是相对低调的API市场&#xff0c…

冲刺学习-MySQL-基础

基础 数据类型 常见数据类型的属性 整型 TINYINT、SMALLINT、MEDIUMINT、INT&#xff08;INTEGER&#xff09;和 BIGINT 可选属性 M&#xff1a;表示显示宽度&#xff08;从MySQL 8.0.17开始&#xff0c;整数数据类型不推荐使用显示宽度属性&#xff09;UNSIGNED&#xff1…

hdlbits系列verilog解答(7458芯片)-10

文章目录 wire线网类型介绍一、问题描述二、verilog源码三、仿真结果 wire线网类型介绍 wire线网类型是verilog的一种数据类型&#xff0c;它是一种单向的物理连线。它可以是输入也可以是输出&#xff0c;它与reg寄存器数据类型不同&#xff0c;它不能存储数据&#xff0c;只能…

设计模式——七大原则详解

这里写目录标题 设计模式单一职责原则应用实例注意事项和细节 接口隔离原则应用实例 依赖倒转&#xff08;倒置&#xff09;原则基本介绍实例代码依赖关系传递的三种方式注意事项和细节 里氏替换原则基本介绍实例代码 开闭原则基本介绍实例代码 迪米特法则基本介绍实例代码注意…

【苍穹外卖 | 项目日记】第八天

前言&#xff1a; 昨天晚上跑完步回来宿舍都快停电了&#xff0c;就没写项目日记&#xff0c;今天补上 目录 前言&#xff1a; 今日完结任务&#xff1a; 今日收获&#xff1a; 引入百度地图接口&#xff1a; 引入spring task &#xff0c;定时处理异常订单&#xff1a; …

ssm+vue的软考系统(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频&#xff1a; ssmvue的软考系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff…

【RNA structures】RNA-seq Part2: RNA转录的重构和前沿测序技术

文章目录 RNA转录重建1 先简单介绍一下测序相关技术2 Map to Genome Methods2.1 Step1 Mapping reads to the genome2.2 Step2 Deal with spliced reads2.3 Step 3 Resolve individual transcripts and their expression levels 3 Align-de-novo approaches3.1 Step 1: Generat…

你还不会DeBug?太low了吧

编程时调试是不可缺少的&#xff0c;Unity中用于调试的方法均在Debug类中。 浅试一下 新建一个物体和脚本&#xff0c;并把脚本挂载到物体上&#xff01; using System.Collections; using System.Collections.Generic; using UnityEngine;public class DeBugTest : MonoBeh…

JavaSE入门---掌握面向对象三大特性:封装、继承和多态

文章目录 封装什么是封装&#xff1f;如何实现封装&#xff1f; 继承什么是继承&#xff1f;继承的语法父类成员访问子类访问父类的成员变量子类访问父类的成员方法 认识super关键字认识final关键字子类的构造方法super VS this在继承关系中各代码块的执行顺序是怎样的&#xf…

AAPCS:最新的ARM子程序调用规则

AAPCS是arm公司发布的ARM架构应用程序二进制&#xff08;ABI&#xff09;程序调用接口&#xff0c;该文档由多个版本&#xff0c;博主第一次ARM程序调用规则是在《ARM体系与结构编程》&#xff0c;但书中描述的是ATPCS&#xff0c;AAPCS是ATPCS的升级版。后面去ARM官网看到了AA…

冯诺依曼体结构 - 为什么要有操作系统

冯诺依曼体系结构 基础 概念认识 我们现在常见的 计算机&#xff0c;如 笔记本电脑&#xff0c;或者是不常见的 计算机&#xff0c;如服务器&#xff0c;大部分都遵循一个体系结构 -- 冯诺依曼体系结构。计算机的基本构成 就是由 冯诺依曼体系结构 来构成计算机的基本单元的。…

机械设备经营小程序商城的作用是什么

由于机械设备厂商品牌需要各地招商代理&#xff0c;因此在管理方面也需要工具进行高效管理。如今各个行业都在开展数字化转型解决行业所遇难题或通过线上销售解决传统三公里难题及品牌扩张难题、用户消费渠道少等难题&#xff0c;构建会员体系精细化管理&#xff0c;同时还需要…

轻松快速搭建一个本地的语音合成服务

前言 本文将介绍一个可以快速搭建本地语音合成的服务&#xff0c;模型和代码已全部提供&#xff0c;不需要联网运行。项目使用的是VITS模型结构&#xff0c;能够很轻松地启动服务。 安装环境 安装Pytorch。 # 安装CPU版本的Pytorch conda install pytorch torchvision torc…

【了解一下,Elastic Search的检索】

文章目录 **1.1.ES**1.1.1.elasticsearch的作用**1.1.2.ELK栈****2.索引库操作****2.1.mapping映射属性****2.2.索引库的CRUD** **3. 文档操作** **基于IDEA操作ES****索引操作****文档操作** DSL查询文档**1.1.DSL查询分类****1.2. 全文检索查询****1.3. 精准查询****1.4. 地理…

消息订阅与发布pubsub

消息订阅与发布 订阅消息&#xff1a;消息名发布消息&#xff1a;消息内容 A组件想使用C组件里面的东西&#xff0c;A需要数据&#xff0c;C是提供者。 在A组件里面订阅一个消息&#xff0c;假设订阅的消息名叫做Demo&#xff0c;指定回调函数叫test&#xff1b;C发布消息&…

ARM映像文件组成

引言 ARM编译器将各种源文件&#xff08;汇编文件、C语言程序文件、C语言程序文件&#xff09;编译生成ELF格式的目标文件&#xff08;后缀为.o文件&#xff0c;以下将目标文件简称为.o文件&#xff09;&#xff0c;.o文件经过连接器&#xff0c;和C/C运行时库一起编译生成ELF格…