
动态规划
文章平均质量分 79
witnessai1
初学者的无知在于未学,学者的无知在于学后
展开
-
常用算法设计思想之一:动态规划算法
常用的算法设计思想主要有动态规划、贪婪法、随机化算法、回溯法等等,这些思想有重叠的部分,当面对一个问题的时候,从这几个思路入手往往都能得到一个还不错的答案。本来想把动态规划单独拿出来写三篇文章呢,后来发现自己学疏才浅,实在是只能讲一些皮毛,更深入的东西尝试构思了几次,也没有什么进展,打算每种设计思想就写一篇吧。动态规划(Dynamic Programming)是一种非常有用的用来解转载 2015-08-21 17:10:15 · 1578 阅读 · 2 评论 -
最长公共上升子序列
最长公共上升子序列问题:给定两个字符串x, y, 求它们公共子序列s, 满足si 比较直观的做法(O(n^4))可以仿照最长上升子序列用dp[i][j], 表示以xi, yj结束的公共字串的长度.so, 我们可以得出递推公式if xi != yj dp[i][j] = 0else dp[i][j] = max(dp[ii][ij转载 2017-09-28 22:54:22 · 1206 阅读 · 0 评论 -
糖果
总时间限制: 1000ms 内存限制: 65536kB描述由于在维护世界和平的事务中做出巨大贡献,Dzx被赠予糖果公司2010年5月23日当天无限量糖果免费优惠券。在这一天,Dzx可以从糖果公司的N件产品中任意选择若干件带回家享用。糖果公司的N件产品每件都包含数量不同的糖果。Dzx希望他选择的产品包含的糖果总数是K的整数倍,这样他才能平均地将糖果分给帮助他维护世界和平的伙伴们。当然,在原创 2017-09-27 17:43:29 · 642 阅读 · 0 评论 -
Maximum sum
总时间限制: 1000ms 内存限制: 65536kB描述Given a set of n integers: A={a1, a2,..., an}, we define a function d(A) as below: t1 t2 d(A) = max{ ∑ai + ∑aj | 1 <= s1 <= t1 <原创 2017-09-27 17:06:44 · 403 阅读 · 0 评论 -
装箱问题
总时间限制: 1000ms 内存限制: 65536kB描述有一个箱子容量为V(正整数,0要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。输入第一行是一个整数V,表示箱子容量。第二行是一个整数n,表示物品数。接下来n行,每行一个正整数(不超过10000),分别表示这n个物品的各自体积。输出一个整数,表示箱子剩余空间。样例输入246原创 2017-09-27 17:03:35 · 758 阅读 · 0 评论 -
最大上升子序和
总时间限制: 1000ms 内存限制: 65536kB描述一个数的序列bi,当b1 你的任务,就是对于给定的序列,求出最大上升子序列和。注意,最长的上升子序列的和不一定是最大的,比如序列(100, 1, 2, 3)的最大上升子序列和为100,而最长上升子序列为(1, 2, 3)输入输入的第一行是序列的长度N (1 输出最大上升子序列和样例输入71原创 2017-09-27 16:59:36 · 328 阅读 · 0 评论 -
数字组合
总时间限制: 1000ms 内存限制: 65536kB描述有n个正整数,找出其中和为t(t也是正整数)的可能的组合方式。如:n=5,5个数分别为1,2,3,4,5,t=5;那么可能的组合有5=1+4和5=2+3和5=5三种组合方式。输入输入的第一行是两个正整数n和t,用空格隔开,其中1接下来的一行是n个正整数,用空格隔开。输出和为t的不同的组合方式的数目。样例输原创 2017-09-27 16:55:10 · 259 阅读 · 0 评论 -
最长公共子序列
总时间限制: 1000ms 内存限制: 65536kB描述我们称序列Z = 1, z2, ..., zk >是序列X = 1, x2, ..., xm >的子序列当且仅当存在 严格上升 的序列1, i2, ..., ik >,使得对j = 1, 2, ... ,k, 有xij = zj。比如Z = 是X = 的子序列。现在给出两个序列X和Y,你的任务是找到X和Y的最大公共原创 2017-09-27 16:47:55 · 348 阅读 · 0 评论 -
最大子矩阵
总时间限制: 1000ms 内存限制: 65536kB描述已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵。比如,如下4 * 4的矩阵0 -2 -7 09 2 -6 2-4 1 -4 1-1 8 0 -2的最大子矩阵是9 2-4 1-1 8这个子矩阵的大小是15。原创 2017-09-27 16:31:28 · 369 阅读 · 0 评论 -
最长上升子序列
总时间限制: 2000ms 内存限制: 65536kB描述一个数的序列bi,当b1 b2 bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, ..., aN),我们可以得到一些上升的子序列(ai1, ai2, ..., aiK),这里1 i1 i2 iK 你的任务,就是对于给定的序列,求出最长上升子序列的长度。输入输入的第一行是序列的长度N (1原创 2017-09-27 16:25:20 · 217 阅读 · 0 评论 -
hihoCoder #1044 : 状态压缩·一 (清垃圾)
原文:http://www.cnblogs.com/xcw0754/p/4453251.html题意: 某车厢有一列座位,共有n个位置,清洁工要在这n个位置上清垃圾,但是不能全部位置都清理,只能选择部分。选择的规则是,连续的m个位置内,不能够清理超过q个,也就是说从第1~m个位置最多可以清q个,清q+1个就不行了。当然,q一般是小于m的,不然岂不是可以m个位置全清了?那就没限制了转载 2017-04-19 16:37:06 · 482 阅读 · 1 评论 -
状态压缩动态规划
原文:http://blog.youkuaiyun.com/u011077606/article/details/43487421状态压缩动态规划(简称状压dp)是另一类非常典型的动态规划,通常使用在NP问题的小规模求解中,虽然是指数级别的复杂度,但速度比搜索快,其思想非常值得借鉴。为了更好的理解状压dp,首先介绍位运算相关的知识。1.’&’符号,x&y,会将两个十进制数在二进制下转载 2017-04-19 00:11:29 · 3953 阅读 · 1 评论 -
六种姿势拿下连续子序列最大和问题,附伪代码(以HDU 1003 1231为例)
原文: http://blog.youkuaiyun.com/hcbbt/article/details/10454947问题描述: 连续子序列最大和,其实就是求一个序列中连续的子序列中元素和最大的那个。 比如例如给定序列: { -2, 11, -4, 13, -5, -2 } 其最大连续子序列为{ 11, -4转载 2017-04-13 23:20:32 · 1164 阅读 · 0 评论 -
csp2016 12压缩编码
转载:http://blog.youkuaiyun.com/more_ugly_less_bug/article/details/60142954问题描述 给定一段文字,已知单词a1, a2, …, an出现的频率分别t1, t2, …, tn。可以用01串给这些单词编码,即将每个单词与一个01串对应,使得任何一个单词的编码(对应的01串)不是另一个单词编码的前缀,这种编转载 2017-03-14 21:40:17 · 997 阅读 · 3 评论 -
01背包,完全背包,多重背包
P01: 01背包问题 这是最基本的背包问题,每个物品最多只能放一次题目有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。基本思路这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][v]表示前原创 2017-03-14 19:11:51 · 301 阅读 · 0 评论 -
背包问题九讲笔记_01背包
摘自Tianyi Cui童鞋的《背包问题九讲》,稍作修改,方便理解。01背包问题描述已知:有一个容量为V的背包和N件物品,第i件物品的重量是weight[i],收益是cost[i]。限制:每种物品只有一件,可以选择放或者不放问题:在不超过背包容量的情况下,最多能获得多少价值或收益相似问题:在恰好装满背包的情况下,最多能获得多少价值或收益这里,我们先讨论在不超过背包容量的情况转载 2016-09-29 16:05:00 · 647 阅读 · 0 评论 -
动态规划:从新手到专家
动态规划:从新手到专家March 26, 2013作者:Hawstein出处:http://hawstein.com/posts/dp-novice-to-advanced.html声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0 ,转载请注明作者及出处。前言本文翻译自T转载 2016-09-28 16:23:32 · 268 阅读 · 0 评论 -
2000:最长公共子上升序列
总时间限制: 10000ms 内存限制: 65536kB描述给定两个整数序列,写一个程序求它们的最长上升公共子序列。当以下条件满足的时候,我们将长度为N的序列S1 , S2 , . . . , SN 称为长度为M的序列A1 , A2 , . . . , AM的上升子序列:存在 1 1 2 N j = Aij,且对于所有的1 j j+1。输入每个序列用两行表示,第转载 2017-09-28 22:55:42 · 1562 阅读 · 0 评论