首页 > 编程语言 >力扣每日一题+python知识点回顾(五)

力扣每日一题+python知识点回顾(五)

时间:2023-10-23 20:25:59浏览次数:49  
标签:做菜 知识点 like 道菜 python satisfaction 力扣 time dp

力扣题目:做菜顺序(题号: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 系数

编程思路:动态规划

先我们来看like-time的计算公式:time[i]*satisfaction[i],要想like-time 系数总和最大,那么每一个 like-time 都要尽可能大。因此两个乘数都要尽可能的大,即 time 和 satisfaction 都要尽可能大。那么我们可以得出一个结论:满意度越大的菜,越靠后做,这样时间因子就会更大。

有以下两种情况:

  1. 当满意度为正时,like-time系数也是正的, 这些菜就按照满意度从低到高依次做就行。
  2. 当满意度为负时,这个菜的作用就是堆时间量,当增加这个菜导致的满意度减少与时间量增加的差值是为正是,可以考虑加入选择。

因此我们得出一下设计方案:
我们先将做菜顺序按满意度从低到高排序,然后通过反向思维来考虑,如果我们只选择一道菜,我们是否选择做菜,做哪道菜?选取最佳方案,再此基础上选取只做两道菜时的方案,通过对比所有方案,保存like-time系数最大的方案,以此倒推,直到我们便利完所有菜,查询最大like-time系数时选择的菜的做菜顺序可得最终答案。

编程代码:

class Solution:
def maxSatisfaction(self, satisfaction: List[int]) -> int:
    l = len(satisfaction)
    dp = [[0 for _ in range(l + 1)] for _ in range(l + 1)]
    satisfaction.sort()
    ans = 0
    for i in range(1 , l + 1):
        for j in range(1 , i + 1):
            dp[i][j] = dp[i - 1][j - 1]+satisfaction[ i - 1 ] * j #求使用上这道菜的值
            if j < i:
                dp[i][j] = max(dp[i][j],dp[i - 1][j])#判断是否做这道菜
            ans = max(ans,dp[i][j])
    return ans

标签:做菜,知识点,like,道菜,python,satisfaction,力扣,time,dp
From: https://www.cnblogs.com/LWHD/p/17783359.html

相关文章

  • Python调用C或者C++
    基本说明文件类型介绍.out是可执行文件,相当于win上的exe;.o是编译中间目标文件,相当于win上的.obj;.a是静态库,多个.o练链接得到,用于静态链接;.so是共享库,用于动态链接,相当于win上.dll可执行文件file查看文件类型ldd命令查看某个可执行文件依赖了哪些动态链接库ldd能够显示......
  • Python学习1
    syntax blocks#statements->instruction1.literal90、"ONE"2.operator3.comment4.variablestoremodifyaccess5.functiondefadd(n):#statementreturnn6.keyword Writecodeinoneofthesethreecommonways:Directly(python.exe)Progr......
  • 力扣每日一题+python知识点回顾(四)
    力扣题目:统计无向图中无法互相到达点对数(题号:2316)给你一个整数n,表示一张无向图中有n个节点,编号为0到n-1。同时给你一个二维整数数组edges,其中edges[i]=[ai,bi]表示节点ai和bi之间有一条无向边。请你返回无法互相到达的不同点对数目。示例一:输入:n=3,edges=[[0,1],[0,2......
  • Python40days
    针对记录的SQL语句配置文件的介绍存储引擎的使用(存储的方式)数据类型***整型  浮点型  字符串 日期 枚举约束条件zerofill unsigned  notnu default  unique primarykey auto_increment———————————————————————————......
  • CentOS 7 安装 Python 3.10
    1.安装编译所需的依赖sudoyum-yupdatesudoyum-yinstallopenssl-devellibffi-develbzip2-develsudoyum-ygroupinstall"DevelopmentTools" 2.安装Python3.10必需的openssl>=1.1.1wgethttps://www.openssl.org/source/openssl-1.1.1q.tar.gz-......
  • Python网页应用开发神器fac 0.2.10版本新功能介绍
    fac项目地址:https://github.com/CNFeffery/feffery-antd-components欢迎star支持⭐大家好我是费老师,由我开源维护的Python网页通用组件库fac前不久更新至0.2.10新版本,使用下列命令可快速完成更新:pipinstallfeffery-antd-components-U-ihttps://mirrors.aliyun.com/p......
  • Python拆分列中文和 字符
    importpandasaspddefextract_characters(file_path,sheet_name,column_name):#读取Excel文件df=pd.read_excel(file_path,sheet_name=sheet_name)#创建两个新的列df['中文']=''df['其他字符']=''#遍......
  • Mysql新增分区-Python版
    importdatetimeimportsysimportpandasaspdimportpymysqlimportsqlalchemy.engine.urlasengineUrlfromsqlalchemyimportcreate_engineDB_INFO={"host":"IP","port":3306,"username":"ro......
  • 【文心一言】百度千帆 Python 和 JavaScript 调用上下文 API
    接口为:百度ERNIE-Bot-4(邀测)控制台直达链接JavascriptconstAK="urAK"constSK="urSK"constaxios=require("axios").default;letaccess_token="urtoken"varurl='https://aip.baidubce.com/rpc/2.0/ai_custom/v1/w......
  • 【Python微信机器人】第二篇:将python注入到其他进程
    目录修整目前的系列目录(后面会根据实际情况变动):在windows11上编译python将python注入到其他进程并运行使用C++写一个python的pyd库,用于实现inlinehookPythonctypes库的使用使用ctypes主动调用进程内的任意函数使用汇编引擎调用进程内的任意函数(为了调用不遵守任何一......