ACM
文章平均质量分 69
kepler-moment
这个作者很懒,什么都没留下…
展开
-
01背包
有n个物品,每个物品体积是costs = {c1,c2,...cn},每个物品的价值是values = {v1,v2,...vn},每个物品只能取一次(所谓01背包,即每个物品只有两种状态:放或不放)。现在有体积为v的背包,问将这些物品放入该背包,能得到的最大价值是多少?并输出最大时的选择方案。推导:设dp[i][j]为将前i个物品放入j的背包能取得的最大值,我们来看dp[i][j]可由哪些值原创 2013-08-29 12:14:47 · 607 阅读 · 0 评论 -
完全背包
有n个物品,每个物品体积是costs = {c1,c2,...cn},每个物品的价值是values = {v1,v2,...vn},每个物品只能取无限次。现在有体积为v的背包,问将这些物品放入该背包,能得到的最大价值是多少?并输出最大时的选择方案。推导:设dp[i][j]为将前i个物品放入体积为j的背包时取得的最大价值。来看,dp[i][j]可由哪些状态得到?1、若第i个物品不放入背包,那原创 2013-08-29 16:20:45 · 359 阅读 · 0 评论 -
多重背包
有n个物品,每个物品体积是costs = {c1,c2,...cn},每个物品的价值是values = {v1,v2,...vn},个数为nums = {m1,m2,...mn}。现在有体积为v的背包,问将这些物品放入该背包,能得到的最大价值是多少?我们可以将该问题转化为01背包求解,那么时间复杂度为O(nvs),s = m1 + m2 + ... + mn。那么,我们可以采用二进制的思想将时原创 2013-08-30 17:44:12 · 405 阅读 · 0 评论 -
LCIS类模板
templateclass LCIS{private: static const short maxLength = 501; //序列的最大长度 unsigned short length1,length2; //分别表示seq1,seq2的长度 T seq1[maxLength],seq2[maxLength]; //源序列 unsigned short dp原创 2013-10-07 13:35:47 · 391 阅读 · 0 评论 -
拓扑排序
1、hdu 4324题目要求假如a到b没有边,那么b到a一定有边,且两点之间只可能有一条边。根据这个要求,我们可以知道,只要图中存在环,那么就一定存在3元环。那么,只要用拓扑排序删除入度为0的节点,计算剩下的节点就可以了。2、hdu 2647反向建边,要注意的是,如果a -> b,c -> b,那么要从a和c中选择一个最大的。这里点太多,需要用邻接表来表示。3、hdu 2497原创 2013-10-25 14:05:41 · 577 阅读 · 0 评论 -
最小树形图
最小树形定义:在向图中,通过某一个定点v,能访问到所有其它点,且使权值和最小。本文介绍的算法叫朱刘算法,是由两位中国人朱永津,刘振宏在1965所发明。算法的核心思想是除了定点外,每个点必有一条入边,贪心及缩点。它的步骤是:step1:从v点出发,检测是否能访问所有顶点。能,执行step2;否则不存在最小树形图,返回。step2:对于除定点v之外的所有点,找出它的最小入边pre[i]原创 2013-11-13 15:41:33 · 368 阅读 · 0 评论 -
Codeforces Round #214
A和B都是简单题C. Dima and Salad题意:给出n个a[i],再给出与a[i]对应的b[i],求一组序列,在sum(a[j]) = k * sum((b[j]) (1 思路:就是一个代价有负数的01背包,求代价刚好为0时的最大值。我们来看,如果代价全是非负数时,我们的代码: for(int i = 1;i <= n;i++) for(int v = max;v >=原创 2013-12-06 19:35:07 · 475 阅读 · 0 评论 -
LIS
1、定义LIS(Longest Increasing )原创 2014-08-19 16:48:18 · 415 阅读 · 0 评论 -
LCS
LCS(Longest Common Subsequence),最长公共子序列,典型的dp问题。原创 2014-08-31 13:50:19 · 400 阅读 · 0 评论