
动态规划
文章平均质量分 93
益达爱喝芬达
能摆就不要卷
展开
-
力扣11.11
每次切割的成本都是当前要切割的棍子的长度,切棍子的总成本是历次切割成本的总和。对棍子进行切割将会把一根木棍分成两根较小的木棍(这两根木棍的长度和就是切割前木棍的长度)。在每次操作中,你可以删除 nums 中的一个元素。有一根长度为 n 个单位的木棍,棍上从 0 到 n 标记了若干位置。给你整数数组 nums ,请你返回将 nums 变成 山形状数组 的 最少 删除次数。给你一个整数数组 cuts ,其中 cuts[i] 表示你需要将棍子切开的位置。你可以按顺序完成切割,也可以根据需要更改切割的顺序。原创 2024-11-11 15:37:33 · 1017 阅读 · 0 评论 -
力扣11.4
这题可以转化为分组背包,预处理每个栈的前缀和,每个前缀和实际就是每个组的物品,且每组只能选一个。交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空。次操作的前提下,你钱包里硬币面值之和 最大为多少。个栈里 从顶到底 的硬币面值。每个栈有 正整数 个带面值的硬币。每一次操作中,你可以从任意一个栈的 顶部 取出。每步 可以删除任意一个字符串中的一个字符。个硬币,从栈中移除它,并放入你的钱包里。求出两个单词的最长公共子序列长度为。,请你返回在 恰好 进行。相同所需的最小步数。原创 2024-11-04 21:18:17 · 873 阅读 · 0 评论 -
力扣11.3
需要注意的是,每一行都必须选元素,因此只能使用上一轮的状态,需要两个dp合并使用,否则会受之前状态的影响。从矩阵的 每一行 中选择一个整数,你的目标是 最小化 所有选中元素之 和 与目标值。分组背包,将被一行的元素看作一组,每次只能选一行中的一个元素,朴素dp做法是令。将dp数组转换成一个二进制数,若二进制数的第i位为1,则说明体积为j的方案存在。,请返回投掷骰子的所有可能得到的结果(共有。种方式),使得骰子面朝上的数字总和等于。为选择前i行,元素之和为j的方案是否存在。个一样的骰子,每个骰子上都有。原创 2024-11-03 15:06:16 · 1069 阅读 · 0 评论 -
力扣11.2
给你两个长度为 n 下标从 0 开始的整数数组 cost 和 time ,分别表示给 n 堵不同的墙刷油漆需要的开销和时间。最初的dfs思想是dfs(i,j,k)表示要刷即将i+1-n的墙,当前付费时间为j,免费时间为k的最少开销,考虑dfs的边界条件。我们发现每次比较的都是付费时间和免费时间的相对大小,因此可以将付费时间和免费时间合并为两者的差值。使用01背包进行分析,我们考虑什么时候能选择第i个付费粉刷匠,总墙数维j,需要满足,此时。,前i个物品,体积至少为j的价值为多少。再使用滚动数组优化一下。原创 2024-11-02 16:00:48 · 881 阅读 · 0 评论 -
力扣11.1
此时若第一个集合方案有{1}{2}{3}{4}{1,2}{1,3}{1,4}{2,3}{2,4}{3,4}{1,2,3}{1,2,4}{1,3,4}{2,3,4}{1,2,3,4},对于集合1为{1}的情况,集合2为{2,3,4},但是{2,3,4}也在集合1的方案中,因此实际此时已经包含了集合1:{1}集合2:{2,3,4},和集合1:{2,3,4},集合2:{1}的情况,但是最后err仍然乘了2,所以多算了一倍。(其中n为nums的个数),因为集合一和二若互换元素也算一种方案,最后不合法方案。原创 2024-11-01 15:07:16 · 710 阅读 · 0 评论 -
力扣10.19
01背包,将每个数的价值看作是1,背包容量为target,令dp[i][j]为前i个数容量正好为j是的长度,这道题和普通01背包不同就在于需要正好是j,因此需要将其他的不合法状态设置为一个极小值,其他就按照正常01背包套路来写,然后可以利用轮动数组优化一下。考虑10110这个元素,要使下标为[2:]的元素均为1,必须得先把[3:]的元素变为0,因此考虑从尾向头遍历,若当前位置为1且不是首部,则反转它和后面的,若当前位置为0,也进行翻转。反转 一个元素指的是将它的值从 0 变 1 ,或者从 1 变 0。原创 2024-10-19 15:24:11 · 1070 阅读 · 0 评论 -
力扣10.18
记忆化收缩,令dfs(i,j)表示perm[0]到perm[i]的逆序对数量为j的排列个数,首先对req数组进行预处理,若在i处没有逆序对要求,则将其req设为-1,否则设为对应的值,接下来分两种情况讨论。使用记忆化搜索来解决,令dfs(i,j,k)表示机器人1,2分别从(i,j)和(i,k)处开始到最后一行的樱桃数目最大值,容易得到。你有两个机器人帮你收集樱桃,机器人 1 从左上角格子 (0,0) 出发,机器人 2 从右上角格子 (0, cols-1) 出发。表示这个要求中的末尾下标和 逆序对 的数目。原创 2024-10-18 23:08:22 · 891 阅读 · 0 评论 -
洛谷9.16
鼹鼠是一种很喜欢挖洞的动物,但每过一定的时间,它还是喜欢把头探出到地面上来透透气的。根据这个特点阿牛编写了一个打鼹鼠的游戏:在一个n×n的网格中,在某些时刻鼹鼠会在某一个网格探出头来透透气。你可以控制一个机器人来打鼹鼠,如果i时刻鼹鼠在某个网格中出现,而机器人也处于同一网格的话,那么这个鼹鼠就会被机器人打死。而机器人每一时刻只能够移动一格或停留在原地不动。机器人的移动是指从当前所处的网格移向相邻的网格,即从坐标为ij的网格移向i−1ji1jij−1ij1。原创 2024-09-16 20:24:53 · 1090 阅读 · 0 评论 -
力扣9.7
个字符构成子序列只要空字符串满足,个数为1,即。个字符的数量,接下来设置边界条件,当。出现的个数,结果需要对。个字符构成的子序列中为。原创 2024-09-07 13:45:54 · 769 阅读 · 0 评论 -
状压DP
求把N×M的棋盘分割成若干个 1×2 的的长方形,有多少种方案。例如当N2M4时,共有 5 种方案。当N2M3时,共有 3 种方案。原创 2024-09-06 22:19:28 · 1264 阅读 · 0 评论