后台天天有人问背包问题,这个问题其实不难啊,如果我们号动态规划系列的十几篇文章你都看过,借助框架,遇到背包问题可以说是手到擒来好吧。无非就是状态 + 选择,也没啥特别之处嘛。 今天就来说一下背包问题吧,就讨论最常说的 0 1 背包问题。描述: 给你一个可装载重量为 的背包和 个物品,每个物品有重量和 ...
分类:
其他好文 时间:
2020-03-10 13:47:41
阅读次数:
50
题意: 有一个概率Q,Q的初始值为1,一个界限P,以及N件物品,每件物品都有自身的价值vi,以及一个概率下降比率pi(表示选取这件物品会导致Q变为 Q*(1-pi))。 问在Q大于P的条件下,最大的收益值。 核心思想:01背包的思想,选取正确的 量 作为背包容量。 题解思路: 如果以概率作为‘背包容 ...
分类:
其他好文 时间:
2020-03-09 22:35:44
阅读次数:
64
动态规划 动态规划问题的一般形式就是求最值。 求解动态规划的核心问题是穷举。 动态规划的穷举有点特别,因为这类问题存在「重叠子问题」,如果暴力穷举的话效率会极其低下,所以需要「备忘录」或者「DP table」来优化穷举过程,避免不必要的计算。 而且,动态规划问题一定会具备「最优子结构」,才能通过子问 ...
分类:
其他好文 时间:
2020-03-08 21:46:59
阅读次数:
71
*传送 这道题就是二维背包加输出具体方案,二维就可以直接在一维背包上多加一维,循环的时候多套一层就ok了。至于记录方案我们可以发现,每一种状态都是由上一种状态转移过来的。我们用ans[][]表示状态,则有ans[j][k]=ans[j-a[i]][k-b[i]]+char(i);最后输出ans[m] ...
分类:
其他好文 时间:
2020-03-08 19:45:34
阅读次数:
45
动态规划 背包问题 状态表示 1.集合:所有只考虑前i个物品,且总体积不大于j的所有选法 2.属性:MAX 2.1 去掉k个物品i 2.2 求MAX,f【i 1】【j k v】 2.3 再加回来k个物品i 状态计算:集合的划分 1. 0 1背包(Acwing 2) 朴素做法 ...
【题目描述】 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习。现在有 $N$ 门功课,每门课有个学分,每门课有一门或没有直接先修课(若课程$a$是课程$b$的先修课即只有学完了课程$a$,才能学习课程 ...
分类:
其他好文 时间:
2020-03-05 13:53:48
阅读次数:
56
题意:用k个机器人去遍历有n个节点的有根树,边权代表一个机器人通过这条边的代价,求最小代价。 $k\le 10$ 背包走起 $f_{u,i}$ 表示遍历完完 $u$ 子树后留 $i$ 个机器人在 $u$ 子树内,$v$ 是 $u$ 的子节点,$val_{u,v}$ 表示 $u \leftrighta ...
分类:
Web程序 时间:
2020-03-03 12:36:28
阅读次数:
81
首先考虑一下:如果我们知道要买(或送)哪几袋米,如何确保自己的钱够用? 显然应该买最便宜的几个,剩下的送。 所以我们可以枚举一个$p$,比$p$便宜的米用买的方式,比$p$贵的米用送的方式,不会遗漏最优解。把米按价格排序用背包就可以做到$O(n^2m)$。 #include<cstdio> #inc ...
分类:
其他好文 时间:
2020-03-03 11:06:27
阅读次数:
50
先看题吧我猜到多数人开始想的就是二进制暴力枚举,对吧,这题这样做可以因为只需要提交答案,完全可以本地暴力,1e9的数据。需要一分钟左右。代码:这里我就不说着种方法了。这题我们可以用,折半枚举。优点:就是能够将时间复杂度降下来,将2^30 变为 2^15 + 2^15解决这题仅仅用了不到1s的时间代码... ...
分类:
编程语言 时间:
2020-03-02 00:42:05
阅读次数:
80
DP 首先先回忆一下dp,dp叫做记忆化搜索,是一种可以把暴力搜索中重复的部分重复利用,从而到达减小复杂度的目的。比如最应该熟悉的背包模型,如果你把选择的过程看成一步一步的,那么在这么多的搜索路径中一定有着很多很多的重复部分,dp就是一种把重复的部分加以利用的方法。相信大家都已经在以前的练习中已经明 ...
分类:
其他好文 时间:
2020-02-29 14:56:16
阅读次数:
88