01背包 有n种物品,背包重量为V,接下来有每个背包的重量w[i],价值v[i],求最大的总价值。 这是01背包的基本样式, 首先分析问题,有两种状态,放还是不放,显然得出了我们第一个dp方程 dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+v[i]) 表示前i个已经 ...
分类:
其他好文 时间:
2018-10-11 11:26:08
阅读次数:
120
摘自维基百科: 动态规划 ( Dynamic Programming ): 把原问题分解为相对简单的子问题的方式求解复杂问题的方法。 动态规划背后的基本思想非常简单。大致上,若要解一个给定问题,我们需要解其不同部分(即子问题),再根据子问题的解以得出原问题的解。 通常许多子问题非常相似,为此动态规划 ...
分类:
其他好文 时间:
2018-10-11 01:39:04
阅读次数:
108
题目 分析 第一眼看去,,很明显的背包问题。 但看看数据规模,于是就想到了贪心,算出性价比,排序 有一个关键点要注意 题目的容积只有1和2 所以当容积是双数时,一定能装完 但单数时呢?? 比如 3 3 1 7 2 14 1 9 排序后贪心一个个加后发现会容积无法达到0 所以为了排除这种情况 在排序是 ...
分类:
其他好文 时间:
2018-10-06 17:08:32
阅读次数:
188
737-石子合并(一) 内存限制:64MB 时间限制:1000ms 特判: No通过数:28 提交数:35 难度:3 题目描述: 有N堆石子排成一排,每堆石子有一定的数量。现要将N堆石子并成为一堆。合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N-1次合并后成为 ...
分类:
其他好文 时间:
2018-10-05 21:33:09
阅读次数:
256
首先是需要我们知道的是假设又一条链给你让你求最大值,你会求吗?当然会,就是时间有点爆炸O(n2)。那不行,要是如果我把到达每个点的最大值以及他对后面的贡献情况都求出来后放在数组里面,然后到了新的节点直接查询该点的情况,但是问题就在于我们存进数组的时候遍历了O(1 << 16)那么时间还是不可以过,这 ...
分类:
其他好文 时间:
2018-10-05 12:13:44
阅读次数:
160
题目:题目链接 思路:不难看出,合成每个宝石需要消耗一定的魔力值,每个宝石有一定的收益,所以只要我们知道每个宝石合成的最小花费,该题就可以转化为一个背包容量为初始魔力值的完全背包问题,每个宝石的最小花费可以用dijkstra跑一遍最短路算出,路径长度用合成花费表示。 AC代码: ...
分类:
其他好文 时间:
2018-10-04 19:52:01
阅读次数:
188
DP-01背包问题例题 输入处理有点恶心人,不过处理完后就是简单的DP了 从头开始dp[i]表示从0开始到i的最优结果,最后从都边里dp数组,求得最大的报销额。 对于每个i都要从头维护最优结果。(二刷感觉仍不得dp精髓,,,,) HDU-1864最大报销额 1 #include <iostream> ...
分类:
其他好文 时间:
2018-10-02 22:26:29
阅读次数:
200
有一棵点数为 N 的树,树边有边权。给你一个在 0~ N 之内的正整数 K ,你要在这棵树中选择 K个点,将其染成黑色,并将其他 的N-K个点染成白色 。 将所有点染色后,你会获得黑点两两之间的距离加上白点两两之间的距离的和的受益。问受益最大值是多少。 Solution 比较经典的树形背包问题。 如 ...
分类:
其他好文 时间:
2018-10-02 22:14:45
阅读次数:
224
题目: ? 思路: 二维dp,完全背包,状态转移方程dp[i][z] = max(dp[i][z], dp[i-1][z-a[j]]+b[j]),dp[i][z]表示在杀i个怪,消耗z个容忍度的情况下获得的最大的经验值。 刚看到这个题一直把思维限制在一维dp中,总是不能表达全部的条件,然后想到二维d ...
分类:
其他好文 时间:
2018-10-02 22:09:13
阅读次数:
141
01背包基本模板,要是需要更详细解释的话可以评论留言我补上,记得持续关注?? ...
分类:
其他好文 时间:
2018-10-01 21:41:46
阅读次数:
391