美文网首页
1402. 做菜顺序【DP】

1402. 做菜顺序【DP】

作者: 月下蓑衣江湖夜雨 | 来源:发表于2020-06-19 09:37 被阅读0次

题目

题目

分析

// 输入:satisfaction = [-1,-8,0,5,-9]
// 首先应该排序,大的应该在后面(给更大的比重)
// [-9, (-8, -1, 0, 5)]
// 子序列这个的值取决于,前面选择了几个?dp[l][k]

代码

package main

import (
    "sort"
)

type DP [][]int
// 输入:satisfaction = [-1,-8,0,5,-9]
// 首先应该排序,大的应该在后面(给更大的比重)
// [-9, (-8, -1, 0, 5)]
// 子序列这个的值取决于,前面选择了几个?dp[l][k]
func maxSatisfaction(satisfaction []int) int {
    length := len(satisfaction)
    dp := make(DP, length, length)
    for i:=0; i<length; i++ {
        dp[i] = make([]int, length)
    }

    sort.Ints(satisfaction)
    return satisfy(satisfaction, dp, 0, 0)
}

func satisfy(satisfaction []int, dp DP, l, k int) int {
    if l>len(satisfaction)-1 {
        return 0
    }

    if dp[l][k] != 0 {
        return dp[l][k]
    }

    // 策略0:l不做
    dp[l][k] = satisfy(satisfaction, dp, l+1, k)

    // 策略1:l做
    case1 := satisfaction[l]*(k+1) + satisfy(satisfaction, dp, l+1, k+1)   // 作为初始值
    if case1 > dp[l][k] {
        dp[l][k] = case1
    }

    return dp[l][k]
}

相关文章

  • 1402. 做菜顺序【DP】

    题目 分析 // 输入:satisfaction = [-1,-8,0,5,-9]// 首先应该排序,大的应该在后...

  • 动态规划算法

    动态规划算法: 五步曲: 1、确定dp数组以及下标i的含义2、递推公式3、dp[i]初始化4、遍历顺序5、打印dp...

  • AcWing 1402. 星空之夜 (flood fill+图哈

    AcWing 1402. 星空之夜 [https://www.acwing.com/activity/cont...

  • 20221111 专业英语14

    1401. introduction of advanced technology 引进先进技术 1402. fi...

  • 动态规划随笔

    DP写程序的循环怎么开始:看初始状态是是什么,再看状态转移方程是什么依赖顺序比如LC375 初始状态 dp[i...

  • 做菜与快速学习

    发现自己已经有很久没有做菜了,现在开始下厨,有很多东西需要重新来过,比如做菜的顺序,做菜需要的放的调料量,以及相对...

  • 不算红烧的红烧鸡😄

    心情郁闷的时候就想做菜,厨艺不练的话很快会生疏。做菜也讲究菜感和搭配,还有统筹运用各种原料的份量和先后加入的顺序。...

  • LeetCode-338-比特位计数

    解题思路: 枚举: dp[0]=0; dp[1]=1;dp[2]=1; dp[3]=2;dp[4]=1; dp[5...

  • 设计模式11:迭代器模式

    迭代器模式(Iterator DP)的定义是:提供一种方式来顺序地访问聚合(aggregate)里的对象而不需暴露...

  • 原生家庭的重要性

    原生家庭对孩子的成长影响是无处不在的,一些小细节的,例如:我们做菜的方式,油盐的多少及如何放的顺序,做菜的口味等等...

网友评论

      本文标题:1402. 做菜顺序【DP】

      本文链接:https://www.haomeiwen.com/subject/xvzmxktx.html