算法竞赛入门经典 (第二版) 第八章 高效算法设计
wcr1996
个人博客:wcr1996.com
展开
-
UVa 1149 - Bin Packing(贪心+二分查找)
简单的贪心问题。输入n个物品的重量,背包的容量m,每个背包最多装两个物品,问需要多少个背包。 思路很简单,最小的和最大的匹配,装不下就改找比那个小一点的。 匹配要用二分查找,遍历会超时。原创 2014-12-03 21:53:31 · 1699 阅读 · 0 评论 -
UVa 11536 - Smallest Sub-Array(尺取法)
给出一个n、m、k,生成一个序列。问其中包含1到k所有正整数的最短连续子序列的长度。原创 2015-07-26 11:39:10 · 1319 阅读 · 0 评论 -
UVa 11134 - Fabled Rooks(贪心)
给出n个车的范围,输出在n*n的棋盘上可行的摆法。 车的行和列是相互独立的,所以问题就简化成了两个一维的区间覆盖问题。 用优先队列维护区间起点最小的车放在编号最小的位置。原创 2015-07-25 14:25:32 · 1455 阅读 · 0 评论 -
UVa 714 - Copying Books(二分查找)
在挑战程序设计竞赛上做过类似的,二分答案判断是否合理。原创 2015-07-25 19:07:50 · 1295 阅读 · 0 评论 -
UVa 12174 - Shuffle(滑动窗口)
给出一段播放记录,判断下次随机开始的地方有几种不同情况。 首先利用滑动窗口判断当前位置的前s个位置数字是否均不同。 然后枚举终点,每次进行验证。原创 2015-07-26 11:03:19 · 1495 阅读 · 0 评论 -
UVa 1617 - Laptop(贪心)
有n个长度为1的线段,给出n个区间,第i个区间表示第i个线段所在的范围,求所给线段至少有几个间隙。 首先对区间进行排序,然后单次遍历,对每个求相交区间,当无法相交时,即有一个间隙。 提交之后发现,这道题rank 1,截图留念:原创 2015-02-28 14:21:12 · 1847 阅读 · 1 评论 -
UVa 1614 - Hell on the Markets(贪心)
输入n个数,第i个数ai满足1≤ai≤i。对每个数添加符号,使和值为0。 排序后从最大的数开始贪心就好。这次用了一些c++不常用的特性写的,一开始缺了个头文件CE了。原创 2015-02-26 22:50:28 · 2783 阅读 · 0 评论 -
UVa 1622 - Robot(贪心)
给出n*m个格子,每个格子里有一个机器人,可以执行东南西北四种指令,但是移动出格就会爆炸。给出四种指令的个数,求最多完成多少次指令。 首先对输入数据进行处理,使得cw≥ce、cn≥cs且先执行东西方向的来回移动比先执行南北方向来回移动更佳。然后执行东西移动,再用类似于UVa-1610 Party Game的排序方法,对比每次向西移动还是开始南北移动更好。当仅剩西和北两个方向后,模拟至结束。原创 2015-04-02 18:00:14 · 2256 阅读 · 9 评论 -
UVa 10954 - Add All(最优二叉树)
简单题。原创 2015-07-25 18:57:14 · 1316 阅读 · 0 评论 -
UVa 1623 - Enter The Dragon(贪心)
有一只龙,在每个不下雨的日子都可以喝干一个湖里的水,当湖满时,再向这个湖里下雨就会溢出。给出下雨的顺序,求龙喝水的序列。 记录每个湖上次满水的日子,和不下雨的日子。下雨时,查找当前湖最后灌满的日子之后有没有不下雨的日子,让龙在最近的一天喝光那个湖的水。原创 2015-04-01 19:44:36 · 1833 阅读 · 0 评论 -
UVa 1615 - Highway(贪心)
给出n个点和一个值D,在x轴选出最少的点使得对于每个给出点都有一个选出的点离它的欧几里德距离不超过D。 将给出的点转化成区间,就变成了简单的区间选点问题。原创 2015-04-01 19:49:06 · 1623 阅读 · 0 评论 -
UVa 1610 - Party Games(细节处理)
输入一个含有偶数个串的集合,求一个字符串s0,使集合中一半的串大于s0,另一半小于等于s0,多解输出字典序最小的解。只需将s与中间两个串比较即可。 新串s0从空串开始,每次循环加上一个s1中对应位置的字符。只要满足条件就跳出循环,输出。原创 2014-12-04 00:29:36 · 2321 阅读 · 0 评论 -
UVa 120 - Stacks of Flapjacks(构造法)
给出原本煎饼的排序,输出使得煎饼从小到大排列的翻煎饼方式。 翻煎饼就相当于颠倒序列中的一段连续子序列,每次都把没排好的需要排列在最下面的那个煎饼翻上来,然后再翻到相应的位置。原创 2015-01-23 19:39:02 · 1379 阅读 · 0 评论 -
UVa 1605 - Building for UN(构造法)
输入国家的个数,建造大楼使的每两个国家都有办公室相连。 例题书上给了很巧妙的思路,建造两层的n*n的大楼,第一层的第i行的都是国家i,第二层的第j列都是国家j。原创 2015-02-09 12:38:02 · 1679 阅读 · 0 评论 -
UVa 1152 - 4 Values whose Sum is 0(中途相遇)
给出四个数组a、b、c、d,每个取一个数字,求有多少种取法使得和值为0。 枚举a、b中的和,查找c、d中的和的相反数有没有与a、b的和相等的。O(n^2*logn)的算法,如书上所说的,使用multiset和count超时了,改用数组之后Ac。原创 2015-02-10 20:44:23 · 1461 阅读 · 0 评论 -
UVa 1611 - Crane(构造法)
给出一个1到n的排列,每次可以交换任意偶数区间的前一段和后一段,输出一种操作方法似的操作之后为升序排列。 类似于那个翻煎饼的题,从左开始进行排列。原创 2015-02-12 19:34:46 · 1530 阅读 · 0 评论 -
UVa 11925 - Generating Permutations(构造法)
给出一个1到n的排列,给出操作顺序,使升序排列能变为所给排列。 书上的表述又出错了,导致WA了一次。倒着从所给排列变回升序排列,然后倒着打印解。当前两个已经是升序,就把最后一个拿到前面,否则交换之后再拿。 感觉只要不是求最少步解的题,都可以用构造法转化成类似方法求解。原创 2015-02-12 22:44:08 · 2380 阅读 · 0 评论 -
UVa 1153 - Keep the Customer Satisfied(贪心)
给出订单需要时间和截止时间,求最多能完成多少,hint给了很详细的提示。 先按照截止日期排序,然后单次遍历,每次当前订单耗时小于之前订单最大值时,用当前订单替换耗时最长的订单,最终得到最优解。原创 2015-02-26 22:45:11 · 1563 阅读 · 0 评论 -
UVa 11491 - Erasing and Winning(贪心)
给出一个n个数字的串,去掉d个数字使得串的数值最大。 用贪心法解决,当前一个的数字小于后一个数字时,前一个即被去掉,当去掉个数足够时,读入剩下的字符即可。如果去掉的数目不够,剩下的数字则不存入。原创 2015-02-10 23:16:28 · 2079 阅读 · 0 评论 -
UVa 10570 - Meeting with Aliens(构造法)
将序列储存两遍,用数组代替环,然后枚举起点,每次都把当前数交换过来,即可得到答案。原创 2015-07-25 19:18:09 · 1351 阅读 · 0 评论