动态规划
主要包括动态规划的内容
&不白熊
一头不白熊
展开
-
状压DP(状态压缩)
00100表示 c 有水,11011 表示a,b,d,e 有水。比如一共有a,b,c,d,e五口水井。,例如最多有20口水井,否则极易超时。如果超过则推荐使用双向dfs。通过数的二进制来表示状态。原创 2024-08-12 16:41:45 · 205 阅读 · 0 评论 -
区间DP相关
在区间DP中,我们通常将原问题分解为更小的子问题,这些子问题对应于原问题中不同长度的子区间。通过解决这些子问题,并逐步合并它们的解,我们可以最终得到原问题的解。状态方程为:dp[i][j] = min(dp[i][k] + dp[k+1][j] + case) case是两堆石子的总和。区间dp主要解决一个区间内的问题,比如一排石子,将他们两两相邻合并在一起,每次合并消耗的能量为两堆石子数量之和,求最小消耗。n堆石子,合成一堆一定需要消耗n-1次,那么就遍历最小的消耗合成即可。比如{1,2,3,4}原创 2024-08-11 21:16:47 · 323 阅读 · 0 评论 -
三种经典背包DP
dp[x-1][j] + value[j],防止了这种情况的出现。则状态转移方程:dp[i][j] = max(dp[i-1][j],dp[i-1][j-weight[i]] + value[i])dp[2*j] == dp[j] + value[j]由于dp[j]还没有被计算过,为0,也就是说,物品不会重复添加。现在降维,将dp转换为一维,即dp[j] = max(dp[j],dp[j-weight[i]])dp[i-1][j-weight[i]] + value[i]代表装第i个物品。原创 2024-08-11 16:09:11 · 465 阅读 · 0 评论 -
动态规划入门
将原问题分解成若干个子问题,通过解决子问题并保存结果来避免重复计算,从而提高算法效率。那么就可以创建一个数组让他前两项等于1,之后遍历就可以求出答案。总的来说动态规划就是寻找问题特定的公式;最简单的比如斐波那契数列。原创 2024-08-10 18:57:16 · 342 阅读 · 0 评论