参考《挑战程序设计竞赛》p51 01背包问题 问题描述:有n个重量和价值分别为wi、vi的物品,从这些物品中挑选出总重量不超过W的物品,求所有挑选方案中价值总和的最大值。 input: 45 2 3 1 2 3 4 2 2 output: 7(选择第0、1、 3号物品) 朴素解法: c++版: Ja ...
分类:
其他好文 时间:
2019-02-13 12:29:20
阅读次数:
187
题目一: 最优装载问题,给出n个物体,第i个物体重量为wi。选择尽量多的物体,使得总重量不超过C。 经过前面的学习很容易想到贪心策略,那就是每次选重量最轻的物体,那么物体数就最多。 代码: 题目二: 部分背包问题,有n个物体,第i个物体的重量为wi,价值为vi。在总重量不超过C的情况下让总价值尽量高 ...
分类:
编程语言 时间:
2019-02-12 18:32:15
阅读次数:
201
01背包 问题描述 有n个重量(费用)和价值分别为wi,vi的物品。从这些物品中挑选出总重量(费用)不超过W的物品,求所有挑选方案中价值总和的最大值。 例子 n=4 (w,v)={(2,3),(1,2),(3,4),(2,2)} W=5 输出:7 1 二维数组版:时间复杂度O(nW) ,空间复杂度O ...
分类:
其他好文 时间:
2019-02-10 00:20:13
阅读次数:
161
代码一: //背包问题 #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