滚动数组的作用在于优化空间,主要应用在递推或动态规划中(如01背包问题)。因为DP题目是一个自底向上的扩展过程,我们常常需要用到的是连续的解,前面的解往往可以舍去。所以用滚动数组优化是很有效的。利用滚动数组的话在N很大的情况下可以达到压缩存储的作用。 一个简单的例子: 斐波那契数列: 滚动数组实际是 ...
分类:
编程语言 时间:
2017-05-21 10:00:40
阅读次数:
178
Description 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi。我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件的价值尽可能大(即Vi的和最大)。 但是现在有个问题:软件之间存在依赖关系,即软件i只有在安装了软件j(包括软件j的直接或间接 ...
分类:
其他好文 时间:
2017-05-20 17:22:53
阅读次数:
186
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1257 题解:不能按照单位价值贪心,不然连样例都过不了 要求的r=sum(x[i]*p[i])/sum(x[i]*w[i])不妨设一个辅助函数 z(l)=sum( ...
分类:
其他好文 时间:
2017-05-19 18:41:38
阅读次数:
179
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1086 题解:怎么用二进制优化多重背包,举一个例子就明白了。 如果要放n个苹果,可以将n个苹果分成几个2的次方1,2,3,4,m^2然后n可以由这些按照某种组合来 ...
分类:
其他好文 时间:
2017-05-19 18:37:50
阅读次数:
143
回溯法是一个既带有系统性又带有跳跃性的搜索算法。它在包含问题的所有解的解空间树中,按深度优先策略,从根结点出发搜索解空间树。算法搜索至解空间树的任意一结点时,先判断该结点是否包含问题的解。如果肯定不包含,则跳过对该结点为根的子树搜索,逐层向其祖先结点回溯;否则 ,进入该子树,继续按深度优先策略搜索。 ...
分类:
其他好文 时间:
2017-05-17 12:01:53
阅读次数:
159
DP是一个不能更常用的算法了,这里也就对基础的五大类DP题型做个总结。 背包型 背包问题是很多教材上DP的引入题,它也确实是基础中的基础,总的来说背包型DP有01背包、部分背包、完全背包三种,其余的例如多重背包等都是衍生题目。直接看例题吧。 先看一道01背包。 Codevs 1014装箱问题 这类题 ...
分类:
其他好文 时间:
2017-05-13 17:59:47
阅读次数:
243
在刷华为机试的在线编程,碰到一个类似01背包问题的题目,综合了一些资料,写一些自己的理解 01背包问题就是在有限的称重容量下,求最大价值的问题 假设几个参数: w[i]:第i个物品的重量; p[i]:第i个物品的价值; v[i][j]:表示在前i个物品中,总重量为j时的最大价值; v[i-1][j- ...
分类:
编程语言 时间:
2017-05-10 00:16:18
阅读次数:
243
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5534 题意:给n个点,希望用这n个点构成一棵树,然后每一个度有一个价值,希望价值总和最大。问最大价值。 知道一棵树的度和为2*n-2,并且每一个点必然有1的度,在每个点持有1度的情况下,相当于给n个点分 ...
分类:
其他好文 时间:
2017-05-09 00:49:54
阅读次数:
167
题目来自lintcode http://www.lintcode.com/zh-cn/problem/backpack/ 一个传统01背包问题的推广,假如只考一个背包放物品之后的最终最大价值,不考虑具体选哪些物品放入,该如何实现? 最蠢最笨的办法,那当然就是-老老实实的构造背包容量-物品矩阵,然后取 ...
分类:
其他好文 时间:
2017-05-07 01:02:16
阅读次数:
394
题目描述 N个物品,每个物品都有恰好两个。第I种物品的体积和价值分别是WI 和vi。 背包的体积为T,问在不超过背包体积的情况下,最多能放进多少价值的物品。 输入输出格式 输入格式: 第一行两个整数N,T。 接下来N行每行两个整数Wi,Vi 。 输出格式: 一行一个整数代表答案。 输入输出样例 输入 ...
分类:
其他好文 时间:
2017-05-06 20:53:57
阅读次数:
203