随笔分类 - DP
摘要:1、 POJ 3211 Washing Clothes 分析:洗某种颜色的衣服的顺序是任意的,问题可以转化为,洗某种颜色衣服的最少用时;有两个人可以同时洗,则要使两个人的用时的差最小,即将总用时的1/2作为背包容量,求最接近1/2容量的那个值。只有重量,没有权值的0-1背包:memset(f, -1, sizeof(f));//初始化f[0] = 0; for (j=0; j<ct[i]; j++) {for (int k=vol-time[i][j]; k>=0; k--) {if (f[k] >= 0) {f[k+time[i][j]] = 1;}}}View Code
阅读全文
摘要:一、学习1.sha崽2.几篇论文二、练习题1.Sliding Window [pku-2823]分析:单调队列入门级别的题目。单调队列比普通队列多了一个操作---队尾删除。队列元素有两个域,<index,value>。由于元素是按index(下标)从小到大插入的,所以index在队列中保持单调递增;为保持value的单调性,可以在队尾插入时实现。而队首元素就是所需要的最小值(或最大值)...
阅读全文
摘要:论文推荐一:张辰[2000国家集训队]摘要[线性模型]1.《编辑距离》问题 问题模型:给定两个文本串X和Y,和一个操作集:{s1,s2...,sp}(比如删除一个字符等),每种操作对应一定的花费。求将文本串X变成Y的最小花费。定义状态:d[i,j]为将串X前i个字符变成Y前j个字符的最小花费,转移方程d[i,j] = MIN(d[i+dtk1][j+dtk2] + cost[k]), (其中dtk...
阅读全文
摘要:题型:同Poj 1631.思路:注意非升子序列需要考虑相等的情况,在二分的时候需要注意。[代码]
阅读全文
摘要:描述:要为电路板搭线,要求不能交叉,如图,左边的线柱按升序排好,只需在右边线柱中找最长上升子序列。需要用二分优化。思路:在O(n*n)算法的基础上,加入一个辅助数组best[],下标表示子序列长度,对应值表示所有该长度的序列中的最小头儿,维护这个数组,更新数组。对于新增的数x,找到位置k,使best[k-1]<x ,且best[k]>x,则best[k] = x。设best[]数组长度...
阅读全文
摘要:Problem 38: Subset SumsFor many sets of consecutive integers from 1 through N (1 <= N <= 39), one can partition the set into two sets whose sums are identical. For example, if N=3, one can parti...
阅读全文
摘要:幻灯片 41设d[i,j]为以j项结尾的i段和的最大值, 则需要枚举此段开头y和上一段结尾x, 即d[i,j]=max{d[i-1,x] + a[y..j]}每次需要枚举x<y<=j,决策量为O(n2), 状态为O(nm), 共O(n3m)注意到如果a[j-1]也是本段的, 答案变成为d[i,j-1]+a[j], 因此方程优化为d[i,j]=max{d[i,j-1]+a[j], d[i...
阅读全文
摘要:黑书中一道例题:决斗https://www.spoj.pl/problems/MUSKET/书中的分析:假设需要判断x是否能赢得整场战斗,把环看成链,x点拆成两个,那么编号为x的人能从中胜出的充分必要条件是他能与自己“相遇”。这样,在连续几个人的链中,只须考虑头尾两个人能否胜利会师,中间的则不予考虑。设meet[i][j]记录i和j能相遇,能则为true,否则为false,...
阅读全文

浙公网安备 33010602011771号