【算法题】1402. 做菜顺序

题目:

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

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

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

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

示例 1:

输入:satisfaction = [-1,-8,0,5,-9]

输出:14

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

示例 2:

输入:satisfaction = [4,3,2]

输出:20

解释:可以按照任意顺序做菜 (21 + 3 2 + 4*3 = 20)

示例 3:

输入:satisfaction = [-1,-4,-5]

输出:0

解释:大家都不喜欢这些菜,所以不做任何菜就可以获得最大的 like-time 系数。

提示:

n == satisfaction.length

1 <= n <= 500

-1000 <= satisfaction[i] <= 1000

java代码:

复制代码
class Solution {
    public int maxSatisfaction(int[] satisfaction) {
        int n = satisfaction.length;
        int[][] dp = new int[n + 1][n + 1];
        Arrays.sort(satisfaction);
        int res = 0;
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= i; j++) {
                dp[i][j] = dp[i - 1][j - 1] + satisfaction[i - 1] * j;
                if (j < i) {
                    dp[i][j] = Math.max(dp[i - 1][j], dp[i][j]);
                }
                res = Math.max(res, dp[i][j]);
            }
        }
        return res;
    }
}
相关推荐
Chan163 分钟前
LeetCode 热题 100 | 链表
java·数据结构·spring boot·算法·leetcode·链表·java-ee
程序员小明儿4 分钟前
量子计算探秘:从零开始的量子编程与算法之旅 · 第五篇
算法·量子计算
灰色小旋风5 分钟前
力扣第九题C++回文数
c++·算法·leetcode
@atweiwei15 分钟前
MySQL vs MongoDB 深度对比(底层存储数据结构与并发控制篇)
数据结构·数据库·后端·sql·mysql·mongodb·个人开发
vx-bot55566621 分钟前
企业微信ipad协议的增量同步算法与差量更新机制
算法·企业微信·ipad
cpp_250125 分钟前
P1359 租用游艇
c++·算法·题解·洛谷·线性dp
Naisu Xu28 分钟前
数学笔记:最小二乘法(直线拟合)
笔记·算法·最小二乘法
weixin_3954489131 分钟前
main.c_raw_0311_lyp
前端·网络·算法
weixin_6495556732 分钟前
C语言程序设计第四版(何钦铭、颜晖)第七章之利用数组求矩阵各行元素之和并输出
c语言·算法·矩阵
I_LPL34 分钟前
hot 100 普通数组、矩阵专题
java·数据结构·矩阵·动态规划·贪心·数组·求职面试