优化算法系列之模拟退火算法(1)——0-1背包问题 1问题描述 有一个窃贼在偷窃一家商店时发现有N件商品:第i件物品价值vi元,重wi磅,其中vi、wi都是整数。他希望带走的东西越值钱越好,但他的背包小,最多只能装下W磅的东西(W为整数)。如果每件物品或被带走或被留下,小偷应该带走哪几件东西? 2解 ...
分类:
编程语言 时间:
2018-10-14 13:48:43
阅读次数:
252
分组背包其实也不难,弄清楚前面的这里就十分好解决了 有容积为V的背包,有n件物品,每种物品属于的组别不同,t为最大的组数,每组中的物品相互冲突,所以只能选其中一件 接下来是每件物品的重量w[i],价值v[i],以及组号x,求最大的价值 因为每组物品只能选一件,我们很容易把这转化为01背包 显然dp方 ...
分类:
其他好文 时间:
2018-10-11 15:10:16
阅读次数:
115
其实混合背包就更简单了 有n种物品,背包的容量为V,接下来给出每个物品的重量w[i],价值v[i],数量c[i],如果c[i]为0,表示这种物品有无数件,求最大的价值 显然dp方程分为两种 如果是完全背包则是 dp[j]=max(dp[j],dp[j-w[i]]+v[i]) (j=w[i];j<=V ...
分类:
其他好文 时间:
2018-10-11 12:20:21
阅读次数:
182
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
首先是需要我们知道的是假设又一条链给你让你求最大值,你会求吗?当然会,就是时间有点爆炸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