代码一: //背包问题 #include<iostream> #include<vector> #include<algorithm> using namespace std; struct node{ double w; double p; double t; }; int cmp(const n ...
分类:
其他好文 时间:
2019-02-09 17:42:53
阅读次数:
189
给出背包容量C,M个物体,接下来M行分别给出物品价值V[i],以及物品重量W[i], 物品编号: 1 2 3 物品重量: 5 6 4 物品价值:20 10 12 要使得放入背包的物品价值最大化,我们知道用贪心肯定是不行的。 所以考虑动态规划,首先定义状态dp[i][j]为放入前i(i从小到大)个物品 ...
分类:
其他好文 时间:
2019-02-08 10:27:39
阅读次数:
154
第八课主要介绍递归和动态规划 第八课主要介绍递归和动态规划 介绍递归和动态规划 暴力递归: 1,把问题转化为规模缩小了的同类问题的子问题 2,有明确的不需要继续进行递归的条件(base case) 3,有当得到了子问题的结果之后的决策过程 4,不记录每一个子问题的解 动态规划 1,从暴力递归中来 2 ...
分类:
编程语言 时间:
2019-02-07 09:32:34
阅读次数:
274
动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。在面试笔试中动态规划也是经常作为考题出现,其中较为简单的DP题目我们应该有百分之百的把握顺利解决才可以。一、动态规划定义动态规划实际上是一类题目的总称,并不是指某 ...
分类:
其他好文 时间:
2019-02-06 23:52:07
阅读次数:
177
背包问题: ①. 0/1背包, 每个物品只有1个,即只能选或者不选, 用结构体存贮每个物品的重量和价值, 然后fori(遍历每个物品),再forj(1-i); ②. 完全背包.每个物品都有无限个,可以选择无限个, 用结构体存贮每个物品的重量和价值, 然后fori(遍历每个物品),再forj(i-1) ...
分类:
其他好文 时间:
2019-02-06 11:57:38
阅读次数:
194
hdu2546,01背包,需要有点变形,计算时需要把价格最大的菜先放一边,最后计算。 #include<iostream> #include<cstdio> #include<set> #include<map> #include<vector> #include<iterator> #includ ...
分类:
其他好文 时间:
2019-02-05 22:24:03
阅读次数:
214
P01: 01背包问题 题目 有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。 基本思路 这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。 用子问题定义状态:即f[i][v]表示 ...
分类:
其他好文 时间:
2019-02-01 17:13:41
阅读次数:
169
(1)定义 子集树:所给问题是从N个元素的集合中找出满足某种性质的子集时,相应的解空间树,称为子集树。子集树通常有2^n个叶节点,遍历子集树的任何算法都需要O(2^n)的计算时间。 例如:0-1背包问题的解空间树为一棵子集树。 排列树:当所给的问题是确定N个元素满足某种性质的排列时,相应的解空间称为 ...
分类:
其他好文 时间:
2019-01-30 18:27:02
阅读次数:
2246
题目链接:https://www.luogu.org/problemnew/show/P1064 这是一个有依赖的背包问题,属于01背包的变式。这题还好,每个主件最多有2个附件,那么在对主件进行背包的时候,决策就不再是两个,而是五个。 01背包的决策: 这个题目的决策: 这里需要先判断选附件的决策是 ...
分类:
其他好文 时间:
2019-01-28 21:09:11
阅读次数:
183
题面 $solution:$ 这一题其实就是一个非常明显的三维背包问题(但博主太弱了就10分QAQ) $F[i][j][k]:$表示走到$(i,j)$这个位置并且背包容量为 $k$ 时的最大价值。因为转移时只能向下或向右转移,所以我们可以按行$DP$(从上到下,从左到右遍历),进行滚动数组,从而把第 ...
分类:
其他好文 时间:
2019-01-28 10:45:15
阅读次数:
150