ACM-ICPC征途
文章平均质量分 87
专注算法,分享ACM/ICPC的题解,总结与心得。
PS. 目前在刷dp中
shuangde800
这个作者很懒,什么都没留下…
展开
-
uva 10599 - Robots(II) (dp | 记忆化搜索)
题意给一个n*m大小的网格,有一些格子上面会有一个垃圾。机器人从左上角(1,1)出发,每次只能选择向右,或者向下走一步,终点是(n, m)。问最多可以捡多少个垃圾? 且捡最多垃圾有几种路径方案?注意路径方案指和有垃圾的格子有关。原创 2013-09-13 00:07:50 · 3296 阅读 · 0 评论 -
uva 10934 Dropping water balloons(dp | 难想)
题意你有k个一模一样的水球,在一个n层楼的建筑物上进行测试,你想知道水球最低从几层楼往下丢可以让水球破掉。由于你很懒,所以你想要丢最少次水球来测出水球刚好破掉的最低楼层。(在最糟情况下,水球在顶楼也不会破)你可以在某一层楼丢下水球来测试,如果水球没破,你可以再捡起来继续用。原创 2013-09-12 00:29:35 · 6064 阅读 · 2 评论 -
uva - 10271 - Chopsticks (dp | 经典)
题意 刘汝佳请了K个客人到他家吃晚饭,加上他的家人:他的老婆、儿子、女儿、妈妈、爸爸、岳父、岳母, 那么这顿晚饭一共有K+8个人。因为是吃中餐,所以需要筷子,他家里一共有N根筷子,而且长短不一, 这时刘汝佳的ACMer本性又暴露出来了,他不按照正常的每个人都给两只筷子,而是每个人分3根筷子, 其中最长的一根用来叉比较大块的食物,而另外两根较短的筷子当作正常的使用。为了让每个人用得 更加舒服,显然,要让短的两根筷子长度尽量接近,设这三根筷子的长度为A,B,C(A<=B<=C),原创 2013-09-07 00:19:22 · 3550 阅读 · 0 评论 -
uva-10304 Optimal Binary Search Tree(区间dp)
题意 给一个序列即可 S = (e1,e2,...,en),且e1<e2<..<en.要把这些序列构成一个二叉搜索树。 二叉搜索树是具有递归性质的,且若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它 的右子树不空,则右子树上所有结点的值均大于它的根结点的值。 因为在实际应用中,被访问频率越高的元素,就应该越接近根节点,这样才能更加节省查找时间。 每个元素有一个访问频率f(ei),当元素位于深度为k的地方,那么花费cost(ei) = k. 所有节点的原创 2013-09-07 00:14:10 · 3046 阅读 · 0 评论 -
uva 11456 - Trainsorting(dp,LIS)
题意艾琳是个开火车的机师,她也负责车厢的调度。她喜欢把车厢依重量由大到小排列,把最重的车厢摆在火车的前方。不幸的是,排列车厢并不容易。你不能直接把一截车厢拿起来放在别处。把一截车箱插入现有的列车中间并不切实际。一截车厢仅能接在列车的前面或后面。车厢以事先排定的顺序抵达车站。当一截车厢抵达时,艾琳可以把它接在列车的前方或后方,或根本不要这截车厢。列车越长越好,但是其中的车厢要依重量排列。依车厢抵达的顺序给你车厢的重量,艾琳所能接出的最长火车是多长?原创 2013-09-07 00:12:35 · 3506 阅读 · 0 评论 -
poj 1523 SPF(tarjan求割点)
本文出自 http://blog.csdn.net/shuangde800------------------------------------------------------------------------------------------------题目链接: poj-1523 题意 给一个连通的无向图,求这个图的所有割点,并原创 2013-09-05 00:16:18 · 2141 阅读 · 0 评论 -
ural 1018 Binary Apple Tree(树形dp | 经典)
本文出自 http://blog.csdn.net/shuangde800---------------------------------------------------------------------------------题目链接: url-1018题意 给一棵边有权值的二叉树,节点编号为1~n,1是根节点。求砍掉一些边,原创 2013-09-02 00:49:37 · 2346 阅读 · 0 评论 -
zoj 3201 Tree of Tree(树形背包dp)
题意 给一棵节点带权的树,找到一个有k个节点的子树,求这个子树的最大权值思路 树形dp+背包。 f(i, j) 表示以i为根节点的有j个节点子树的最大权值 然后对i的每个子节点做分组背包,因为对于i的每个儿子,可以选择分配 1,2,3...j-1个节点给它 f(i, j) = max{ max{f(i, j-p) + f(v, p) | 1<=p<j} | v是i的儿子节点} ans = max{ f[i][k] | 0<=i<n && i子树节点个数>=k原创 2013-09-01 00:23:08 · 2160 阅读 · 0 评论 -
poj 1655 Balancing Act(树形dp)
本文出自 http://blog.csdn.net/shuangde800--------------------------------------------------------------------------------------题目链接: poj-1655题意 一n个节点的棵树,去掉某个节点后,会变成一个森林.原创 2013-08-31 21:32:17 · 1587 阅读 · 0 评论 -
poj 3140 Contestants Division(树形dp? dfs计数+枚举)
题目 给n个节点的带权树,删掉其中一边,就会变成两颗子树, 求删去某条边使得这这两颗子树的权值之差的绝对值最小。思路 直接dfs一次,计算所有子树的权值总和tot[i] 删掉一条边(v, fa),fa是v的父亲节点, 那么v字数总总和为tot[v],显然另一棵子树的权值总和就是sum-tot[v], 最总取最小绝对值即可。原创 2013-08-31 21:15:47 · 1377 阅读 · 0 评论 -
poj 2378 Tree Cutting(树形dp)
题目链接: poj-2378题意 给一颗n个结点的树,节点编号为1~n,把删除一个节点之后, 剩下的分支中节点数量最多的数量不大于总数量一半的编号全部按顺序输出思路 和poj-3107 GodFather完全一样,只是输出不一样。改为<=n/2的就输出即可。原创 2013-08-31 14:31:58 · 2848 阅读 · 0 评论 -
poj 3107 Godfather(树形dp)
本文出自 http://blog.csdn.net/shuangde800--------------------------------------------------------------------------------------题目链接: poj-3107题意 给一颗n个结点的树,节点编号为1~n,问删除一个节点之原创 2013-08-31 14:27:04 · 3965 阅读 · 0 评论 -
hdu 3586 Information Disturbing(树形dp + 二分)
题意 给一棵n个节点的树,节点编号为1~n,根节点为1。每条边有权值,砍掉一条边要花费cost(w) 要砍掉一些边, 使得每个叶子节点无法走到根节点。 要求砍掉花费总和不能超过m的情况下,让每条边花费上限尽量低原创 2013-08-31 00:13:51 · 2283 阅读 · 0 评论 -
hdu 4044 GeoDefense (树形dp | 多叉树转二叉树)
题意 这是一个塔防游戏,地图是一个n个编号为1~n的节点的树, 节点1是敌人的基地,其他节点都是你的基地。 敌人的基地会源源不断的出来怪兽,为了防止敌人进攻你的基地,你可以选择造塔。 每个节点最多只能造一个塔,且节点i可以有ki种塔供你选择,价钱和攻击力分别为price_i, power_i 攻击力power_i,效果是让敌人经过这个节点时让敌人的血减少power_i点。 那么从敌人的基地到你的任意一个基地的路径,这条路径上的所有塔的攻击力之和,就是这个基地的抵抗力。原创 2013-08-30 00:13:10 · 4126 阅读 · 0 评论 -
zoj-3626 Treasure Hunt I (树形dp)
题意 给一棵n个节点的树, 节点编号1~n, 每个节点有权值val[i],经过这个节点就可以获取这个价值(不能重复获得) 每一条边有一个花费值w(i,j), 表示走完i和j点的边要花费w(i,j) 现在要从k点出发,总花费值为m,问总花费不超过m的情况下并且最终要回到出发点,最多可以获取多少价值?思路 简单树形dp。 f(i,j)表示子树i, 用花费j最多可以获得的价值 对与i的每个儿子,可以选择分配花费2*w, 2*w+1, 2*w+2,...j给它,可以看作是一原创 2013-08-27 00:13:54 · 2140 阅读 · 0 评论 -
hdu 4597 Play Game(区间dp)
题意 Alice和Bob玩一个游戏,有两个长度为N的正整数数字序列,每次他们两个 只能从其中一个序列,选择两端中的一个拿走。他们都希望可以拿到尽量大 的数字之和,并且他们都足够聪明,每次都选择最优策略。Alice先选择,问 最终Alice拿到的数字总和是多少?思路 这题应该算是区间dp吧,可以看一下这题的原型: 其他规则都一样,但是只有一个数字序列,也是每次只能拿左右两端的一个数字,问最终Alice拿多少? (这个可以去做uva-10891) 只有一行数字原创 2013-08-25 00:16:01 · 2876 阅读 · 0 评论 -
poj 3345 Bribing FIPA (树形背包dp | 输入坑)
题意 有n个国家,你要获取m个国家的支持,获取第i个国家的支持就要给cost[i]的价钱 其中有一些国家是老大和小弟的关系,也就是说,如果你获得了某个老大国家的支持, 那么这个国家的所有小弟(包括小弟的小弟...递归下去)都会无偿免费支持你。 问最少的花费可以得到m个国家的支持思路 这题还是比较好想的树形dp, 不过输入有些麻烦, 一开始以为每组样例结束都是'#',结果一直 RE,后来发现最后一组才是 '#'... 国家由于是直接给名字的,所以我用map<原创 2013-08-25 00:15:14 · 2154 阅读 · 0 评论 -
poj 2486 Apple Tree (树形背包dp)
题意 给一个n个节点的树,节点编号为1~n, 根节点为1, 每个节点有一个权值。 从根节点出发,走不超过k步,问最多可以获取多少权值?思路 因为和uva-1407 caves有点相似,所以没想很久就AC了,但因为初始化问题WA了两次 f(i, j, 0): 表示子树i,走j次,最终不用回到i点获取的最大总权值 f(i, j, 1): 表示子树i,走j次,最终一定要回到i点获取的最大总权值 f(i, j, 1) = min{ min{ f(i, j-k, 1)原创 2013-08-25 00:14:24 · 2232 阅读 · 0 评论 -
hdu 4003 Find Metal Mineral (树形背包dp)
题意 给一棵n个节点的树, 节点编号为1~n, 每条边都有一个花费值. 有k个机器人从S点出发, 问让机器人遍历所有边,最少花费值多少?思路 很好的一题, 推荐! 前天看的这题, 今天才想出来的. 方法想出来后,代码很简单 最近做的几道dp,都是一开始没什么想法,然后过两天再想就想出来了,也许是因为人的潜意识其实会一直在想某个问题 翻看一下网上其他人的做法, 和我的稍有不同, 他们是用f(i, j)表示子树i用j个机器人的最少花费, 一开始我也是这原创 2013-08-24 00:30:02 · 3312 阅读 · 0 评论 -
uva 1407 Caves (树形背包dp)
题意 一棵n个节点的树,树的边有正整数权,表示两个节点之间的距离.你的任务是回答这样的询问:从跟节点出发,走不超过x单位的距离, 最多能经过多少节点?同一个节点经过多次, 只能算一个.思路这题同样是多天看的, 在今天才想出解法的. 动态规划就是这么有意思 :)遍历n个节点, 有两种情况, 第一种是遍历完之后不回到出发点, 第二种是要回到出发点. 两种都可能会重复经过某些边, 但是显然还是第二种遍历的花费会更大在这一题中, 遍历之后不需要回到出发点.f(i, j, 0): 表示原创 2013-08-24 00:28:11 · 3037 阅读 · 1 评论 -
poj 1947 Rebuilding Roads (树形背包dp)
题意 给一棵树,问最少删掉几条边.使得剩下的子树中有节点个数为p个的思路 之前不知道看到谁说这题水, 但是为什么我就不觉得水呢? 3天前就看了这题, 但是没什么想法,然后每天都有去想一下, 一直到今天, 在我对自己方法还有怀疑 的情况下,竟然AC了.. f(i, j) 表示子树i,保留j个节点的最少删边次数, 注意,这里保留的j个节点的子树,是指根节点 为i的j个节点的子树,这样理解的话, 状态转移就容易想多了. 对于子树i, 如果只保留1原创 2013-08-22 00:14:23 · 2468 阅读 · 0 评论 -
hdu 1561 The more, The Better (树形背包dp)
题目ACboy很喜欢玩一种战略游戏,在一个地图上,有N座城堡,每座城堡都有一定的宝物,在每次游戏中ACboy允许攻克M个城堡并获得里面的宝物。但由于地理位置原因,有些城堡不能直接攻克,要攻克这些城堡必须先攻克其他某一个特定的城堡。你能帮ACboy算出要获得尽量多的宝物应该攻克哪M个城堡吗?原创 2013-08-21 00:25:18 · 1919 阅读 · 0 评论 -
hdu 1011 Starship Troopers (树形背包dp)
题意有n个洞穴编号为1~n,洞穴间有通道,形成了一个n-1条边的树, 洞穴的入口即根节点是1。每个洞穴有x只bugs,并有价值y的金子,全部消灭完一个洞穴的虫子,就可以获得这个洞穴的y个金子.现在要派m个战士去找金子,从入口进入。每次只有消灭完当前洞穴的所有虫子,才可以选择进入下一个洞穴。一个战士可以消灭20只虫子,如果要杀死x只虫子,那么要x/20向上取整即(x+19)/20个战士。如果要获得某个洞穴的金子,必须留下足够杀死所有虫子的战士数量, 即(x+19)/20个战士,然后这些留下战士就不原创 2013-08-20 00:11:12 · 3903 阅读 · 1 评论 -
poj 1155 TELE (树形背包dp)
题意 某收费有线电视网计划转播一场重要的足球比赛。他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为各个用户终端,其他中转站为该树的内部节点。 从转播站到转播站以及从转播站到所有用户终端的信号传输费用都是已知的,一场转播的总费用等于传输信号的费用总和。 现在每个用户都准备了一笔费用想观看这场精彩的足球比赛,有线电视网有权决定给哪些用户提供信号而不给哪些用户提供信号。 写一个程序找出一个方案使得有线电视网在不亏本的情况下使观看转播的用原创 2013-08-18 20:15:35 · 1685 阅读 · 0 评论 -
uva-1427 Parade (单调队列优化dp)
题意F城由n+1个横向路和m+1个竖向路组成。你的任务是从最南边的路走到最北边的路,使得走过的路上的高兴值和最大(注意,一段路上的高兴值可以是负数)。同一段路不能经过两次,且不能从北往南走。另外,在每条横向路上所花的时间不能超过k。思路这题在uva和LA上又是不能评测, 于是在hdu和poj上评测了这题这题状态比较容易想到, f(i, j)表示走到第i行第j点的最大价值对于每一点,可以从下一行的走上来,也可以从左边走过来,也可以从右边走过来设L(i, j)表示第i行从左边走到j点的最大价值原创 2013-08-18 00:14:30 · 2565 阅读 · 0 评论 -
uva 12260 - Free Goodies (dp,贪心 | 好题)
题意Petra和Jan分n个糖果,每个人轮流拿,一次只能拿一个,抽签决定谁先开始拿每个糖果有两个值x,y, 如果Petra拿了会获得值x, Jan拿了会获得值yPetra每次都选择对自己价值最大的(x最大)拿,如果有多个x相同大,选择y值最小的Jan选择的策略是,要让自己最终获得的总价值最大, 并且在这个的前提下,要让Petra的值也尽量大问最终他们获得的价值各是多少?原创 2013-08-18 00:10:39 · 2529 阅读 · 0 评论 -
CodeForces #196(Div. 2) 337D Book of Evil (树形dp)
题意给一棵n个结点的树,任意两个节点的距离是指连接两点的最短的边数在树上的某个结点有一个“恶魔之书”,这本书会让距离它d以内的节点都受到影响已知有m个节点收到了影响,问最多有几个结点可能放着“恶魔之书”?原创 2013-08-17 10:07:26 · 2047 阅读 · 0 评论 -
HDU 4679 Terrorist’s destroy(树形dp | 多校8)
题意给一棵树,每条边有个权值,要删掉一条边,删掉以后会变成两颗子树,设两个子树的直径分别为d1, d2,删掉的这条边权值为w问删掉哪一条边,使得w*max(d1, d2)的值最小?原创 2013-08-15 18:03:27 · 1520 阅读 · 0 评论 -
HDU 4681 String (dp, LCS | 多校8)
题意给出3个字符串A,B,C,要你找一个字符串D, 要满足下面规定a) D是A的子序列b) D是B的子序列c) C是D的子串求D的最大长度要注意子序列和子串的区别,子序列是不连续的,字串是连续的原创 2013-08-15 17:14:46 · 1539 阅读 · 0 评论 -
uva 1484 Alice and Bob's Trip (树形dp)
题意给一棵n个结点的树,结点编号为0~n-1,顶点是0每条边都有一个权值。Alice和Bob初始位置在顶点,要往下一直走到叶子结点。第一次是由Bob选择走向哪个子结点,第二次轮到Alice,依次轮流下去...每走过一条边就会获得相应的权值,Bob希望所走的路径总权值越大越好,而Alice希望越小越好每次他们都会选择最优解。最终总权值要在范围[L,R]之内。问最终Bob希望的最大权值是多少?原创 2013-08-15 00:47:35 · 1966 阅读 · 0 评论 -
uva 1169 - Robotruck (单调队列优化dp)
题目大意(LRJ《训练指南》)有n个垃圾,第i个垃圾的坐标为(xi,yi),重量为wi。有一个机器人,要按照编号从小到大的顺序捡起所有垃圾并扔进垃圾桶(垃圾桶在原点(0,0))。机器人可以捡起几个垃圾以后一起扔掉,但任何时候其手中的垃圾总重量不能超过最大载重C。两点间的行走距离为曼哈顿距离(即横坐标之差的绝对值加上纵坐标之差的绝对值)。求出机器人行走的最短总路程(一开始,机器人在(0,0)处)。【输入格式】输入的第一行为数据组数。每组数据的第一行为最大承重C(1≤C≤100);第二行为正整数n(1原创 2013-08-13 00:11:09 · 2533 阅读 · 0 评论 -
uva 437 - The Tower of Babylon(DAG最长路)
本文出自 http://blog.csdn.net/shuangde800题目:点击打开链接题目大意有n个长宽高为x,y,z的砖头,代码原创 2013-08-12 13:15:36 · 3734 阅读 · 1 评论 -
uva 10003 Cutting Sticks (区间dp)
题目大意一根长为l的木棍,上面有n个"切点",每个点的位置为c[i]要按照一定顺序把每个点都砍段,最后变成了n+1段每砍一次,就会有一个花费,例如长度为10,“切点”为2,那么砍完后会变成两段2,8, 那么花费为2+8=10如果有多个“切点”,那么不同顺序切会得到不同的花费。问最小花费是多少?思路注意要增加一个c[n] = lf(i, j) 表示(i,j)区间的最小花费f(i, j) = min{ f(i,k)+f(k+1,j)+c[r]-c[l-1] | l<=k<k }原创 2013-08-12 18:07:53 · 2575 阅读 · 0 评论 -
刘汝佳《训练指南》动态规划::Beginner (25题)解题报告汇总
刘汝佳《算法竞赛入门经典-训练指南》的动态规划部分的习题Beginner 打开这个专题一共有25题,刷完后对dp的感觉提升了不少。现把解题报告整理了一下,希望对大家能有帮助。原创 2013-08-12 14:14:46 · 5571 阅读 · 0 评论 -
uva 10859 Placing Lampposts (树形dp)
题目大意给你一个n个点m条边的无向无环图,在尽量少的节点上放灯,使得所有边都被照亮。每盏灯将照亮以它为一个端点的所有边。在灯的总数最小的前提下,被两盏灯同时被照亮的边数应该尽量大。原创 2013-08-12 00:30:04 · 2963 阅读 · 0 评论 -
uva 11404 Palindromic Subsequence(LCS回文串,最小字典序)
题目大意给一个字符串,输出它的最长回文串,如果有多个结果,输出字典序最小的。思路我们都知道把一个字符串逆序后和原字符串进最长公共子序列,可以计算出它的最长回文串长度。但是这题不仅要输出回文串,而且还要求是字典序最小的,所以挺难搞的。设str1是正序字符串,str2是逆序后的字符串f[i][j].len 表示str1的前i位,str2的前j位,最长公共子串的长度f[i][j].str 表示str1的前i位,str2的前j位,最长公共子串的最小字典序的字符串状态转移和正常的LCS差不多原创 2013-08-12 00:26:24 · 5254 阅读 · 1 评论 -
uva 1291 - Dance Dance Revolution ( dp )
如上图,这是一个跳舞机,初始状态两个脚都在0, 状态表示为(0, 0), 然后跳舞机会给你一系列舞步方向,例如2,3,4,2,3.......每次你必须选择一只脚移动到对应数字方向的各格子上。例如从初始状态(0,0),要移到1, 可以选择左脚或者右脚移上去,对应的状态为(1, 0), (0,1)有一个限制,除了初始状态可以是(0, 0),之后的两只脚就不能再同时在一个格子上!移动脚要耗费体力, 从0移动到其它各自都是耗费2, 从1,2,3,4之间,如果是移动到相邻的格子,比如1->2, 1->4,原创 2013-08-12 00:24:29 · 2354 阅读 · 1 评论 -
uva 10453 - Make Palindrome (区间dp,记忆化搜索)
题目大意给一个字符串,要求添加最少个字符,把它变成回文串,并输出。思路简单的区间dp,f(i, j) 表示区间(i, j) 内的字符串添加的最少个数,变成回文串那么, 如果str[i]==str[j], f(i, j) = f(i+1, j-1) + 1f(i, j) = min{f(i+1, j), f(i, j-1)} + 1;题目要输出方案,那么只要再开一个数组,根据状态转移递归输出即可原创 2013-08-12 00:23:32 · 2314 阅读 · 0 评论 -
uva 1351 String Compression(字符串区间dp)
本文出自 http://blog.csdn.net/shuangde800题目来源: 点击打开链接题目大意给一个字符串,可以把连续相同的部分进行缩写成k(S)的形式,S是一个字符串,k表示有连续相同的S例如,abgogogogo,可以缩写成ab4(go).思路代码/**========================================原创 2013-08-11 22:39:42 · 2154 阅读 · 0 评论 -
uva 1456 - Cellular Network (贪心+概率+dp)
题意(摘自LRJ《训练指南》)手机在蜂窝网络中的定位是一个基本问题。假设蜂窝网络已经得知手机处于c1, c2,…,cn这些区域中的一个,最简单的方法是同时在这些区域中寻找手机。但这样做很浪费带宽。由于蜂窝网络中可以得知手机在这不同区域中的概率,因此一个折中的方法就是把这些区域分成w组,然后依次访问。比如,已知手机可能位于5个区域中,概率分别为0.3、0.05、0.1、0.3和0.25,w=2,则一种方法是先同时访问{c1,c2,c3},再同时访问{c4,c5},访问区域数的数学期望为3*(0.3+0.原创 2013-08-11 00:21:56 · 1996 阅读 · 0 评论