![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法竞赛-第八章
文章平均质量分 63
JeraKrs
本人目前就职于百度商业研发部,有需要内推的朋友简历可发我邮箱 jerakrs@qq.com
展开
-
uva 10245 - The Closest Pair Problem(暴力剪枝)
题目连接:10245 - The Closest Pair Problem题目大意:给出若干个点,找出两个点,使得两点间距离为所有任意两点距离中的最小值。解题思路:本来这题应该用分治的方法去做的,但是偷了点懒,暴力剪枝过了,剪枝的方法就是将所有点按照x的大小来排序,当point[j].x - point[i].x > min(min 为当前找到的最小值),可以跳出循环,开始原创 2013-08-24 00:44:08 · 1244 阅读 · 0 评论 -
uva 10763 Foreign Exchange(排序比较)
题目连接:10763 Foreign Exchange题目大意:给出交换学生的原先国家和所去的国家,交换成功的条件是如果A国给B国一个学生,对应的B国也必须给A国一个学生,否则就是交换失败。解题思路:给出数据 10x y1 22 13 44 3100 200200 10057 22 571 22 1原创 2013-08-22 23:23:21 · 1869 阅读 · 0 评论 -
uva 311 Packets(贪心)
题目连接:311 - Packets题目大意:总共有6种包裹,1 * 1、2 * 2、3 * 3、4 * 4、 5* 5、6 * 6,给出6种包裹的个数,现在有若干个6 * 6 的箱子,问,最少需要多少个箱子可以将所有的包裹装好。解题思路:一开始想成了用分治法去做,结果大部分数据可以过,一些特殊的就不行了,后来才发现这题是到贪心的题目,4、5、6规格的包裹一个包裹就要占一个原创 2013-08-24 00:04:15 · 1351 阅读 · 0 评论 -
uva 757 Gone Fishing(贪心)
题目连接:757 - Gone Fishing题目大意:有N个湖, 每个湖在单位时间内可以钓到s[i]条鱼, 但是每在这个湖钓一次鱼,下次钓到的鱼就会减少d[i]只(每次,知道可以钓到的鱼数为0), 现在给出限定时间,以小时的形式, 题目中的单位时间为5分钟,输出的时候要转换成分钟。然后每个湖之间有一定的距离(距离给出的是该路程所需要的单位时间数)。要求在给定的时间钓到最多的鱼,并输出原创 2013-08-25 11:14:51 · 1090 阅读 · 0 评论 -
uva 11100 The Trip, 2007(贪心)
题目连接:11100 - The Trip, 2007题目大意:一群人要去旅游,有一大堆的包裹, 给出包裹的型号, 现在每个大的包裹可以装小一个小的包裹, 现在要求包裹数量最小,输出最少的包裹数量,以及嵌套方式(不唯一)。解题思路:因为每个包裹都可装小比它小的包裹,又可以被比它大的包裹装下, 所以问题酒转化成找众数, 然后遍历一下,小的要装在比它稍大一点的包裹里。原创 2013-08-24 15:40:50 · 1159 阅读 · 0 评论 -
uva 10905 Children's Game (排序)
题目连接:uva 10905 Children's Game题目大意:给出n个数字, 找出一个序列,使得连续的数字组成的数值最大。解题思路:排序,很容易想到将数值大的放在前面,数值小的放在后面。可是,该怎么判断数值的大小(判断数值大小不能单单比较两个数的大小,比如遇到:1 、10的情况)。其实,判断一个不行,那就将两个合在一起考虑就可以了(就是比较110合101的大小来普判原创 2013-08-22 23:07:13 · 1286 阅读 · 0 评论 -
uva 10026 Shoemaker's Problem(排序)
题目连接;10026 Shoemaker's Problem题目大意:有一个鞋匠接了n双要修的鞋子, 修每双鞋需要d天,每推迟一天修将亏损val元,问按什么样的顺序修鞋可以保证损失最少,如果有多种情况输出字典序最小的。解题思路:最开始把损失钱数最大的放在前面,后来发现每层子问题是相互有影响的,所以不能从整体的损失来看,所以后来改成对两个鞋的装态比较,只要考虑哪双鞋放前和哪双原创 2013-08-23 00:14:45 · 1407 阅读 · 0 评论 -
uva 10020 Minimal coverage(贪心-最小覆盖问题)
题目连接:10020 - Minimal coverage题目大意:给出一个范围M,然后给出若干的区间,以0 0 终止, 要求用最少的区间将0 ~M 覆盖,输出最少个数以及方案。解题思路:典型的区间覆盖问题,算法竞赛入门经典P154上有讲。#include #include #include using namespace std;const int N原创 2013-08-26 09:18:09 · 1810 阅读 · 0 评论 -
uva 10382 Watering Grass(贪心-区间覆盖变形)
题目大意:10382 - Watering Grass题目大意:在一个长order(目标), 宽h的草坪上有n的喷头,每个喷头有对应的半径,为它的工作范围,现在要求选出最少的喷头使的这些喷头的工作范围覆盖整个草坪。解题思路:区间覆盖问题, 这里要注意一下每个喷头的有效作用区间并不是[p - r, p+ r], 因为圆是有弧度的,所以有效区间为t = sqrt(r * r -原创 2013-08-26 09:29:05 · 979 阅读 · 0 评论 -
uva 10340 All in All(子串)
All in AllInput: standard inputOutput: standard outputTime Limit: 2 secondsMemory Limit: 32 MBYou have devised a new encryption technique which encodes a message by inserting between its cha原创 2013-08-18 10:58:49 · 1532 阅读 · 1 评论 -
uva 11054 Wine trading in Gergovia(贪心)
题目连接:11054 - Wine trading in Gergovia题目大意:有N户人家住在一条街上,每户人家有需求和供应葡萄酒, 因为路程的不同,导致交易葡萄酒的成本不同,成不等于交易量* 路程,求,最少的交易成本使得每户人家的需求和供应的到满足,(总需求= 总供应)。解题思路:贪心的思想, 最左边的人家想要获得或者是卖出,一定是对右边的人家进行操作,所以问题可以转原创 2013-08-24 14:44:08 · 1521 阅读 · 0 评论 -
uva 10670 Work Reduction(贪心)
题目连接:10670 - Work Reduction题目大意:有tol的工作量,和要求达到的工作剩余量sur,然后是公司总数,对应每个公司提供两种服务,1、完成一个工作量,2.完成当前未完成工作量的一半(注意这里是tol的一半,不是tol - sur的一半), 当剩余工作量为奇数, 对模2四舍五入。现在给出每个公司的两种服务所需费用, 要求计算出每个公司单独完成工作量所花费的最少金额原创 2013-08-25 00:17:49 · 1281 阅读 · 0 评论 -
uva 10341 Solve It(二分搜索)
题目连接:10341 Solve It题目大意:根据给出的数学公式,在[0,1]上求解。解题思路:二分搜索, 主要注意一下边界和精度就可以了。#include #include #include #include double p, q, r, s, t, u, cur;double count(double x) { return p *原创 2013-08-22 23:47:28 · 1139 阅读 · 0 评论 -
uva 11237 - Halloween treats(抽屉原理)
题目链接:uva 11237 - Halloween treats题目大意:有c个小孩要到邻居家去要糖果,有n户邻居,每户邻居只会提供固定数量的糖果,熊孩子们为了不发生冲突,决定将取来的糖果平均分配,问说取那几家邻居的糖果可以做到平均分配,注意n ≥ c。解题思路:抽屉原理,求出序列的前缀和,有n个,将前缀和对c取模后,根据剩余系定理肯定是在0~c-1之间的,如果是0那么答案就原创 2014-07-09 22:17:34 · 1693 阅读 · 0 评论 -
uva 10602 Editor Nottoobad(排序)
题目连接:10602 Editor Nottoobad题目大意:要输入n个单词,现在有三种操作, 1、输入一个字符,需要按下一次按键。 2、通过声控删除一个字符。3、通过声控复制一遍上面的单词。现在要求按最少的按键来完成输入,并且输出输入的顺序。解题思路:因为有复制这一功能,所以每次输入一个单词之后要找另一个与它相似度最近的一个。比较两个单词对应的不同字符个数,对于两个不原创 2013-08-30 21:02:24 · 1310 阅读 · 3 评论 -
uva 714 Copying Books(二分法求最大值最小化)
题目连接:714 - Copying Books题目大意:将一个个数为n的序列分割成m份,要求这m份中的每份中值(该份中的元素和)最大值最小, 输出切割方式,有多种情况输出使得越前面越小的情况。解题思路:二分法求解f(x), f(x) = 0说明可以满足,f(x) 就是当前最大值为x的情况最少需要划分多少份-要求份数(如果f(x ) >= 0 说明符合要求而且还过于满足,即原创 2013-08-24 13:34:35 · 2058 阅读 · 0 评论 -
uva 10716 Evil Straw Warts Live(贪心)
题目连接:10716 - Evil Straw Warts Live题目大意:给一个单词,为了让它变成一个回文串,允许相邻的两个数交换。求最少的交换次数,使得单词变成一个回文串。解题思路:首先判断一下字母出现的奇数次的个数是否大于1, 大于1不满足。然后从左右开始遍历判断tmp[left] 和 tmp[right]是否相同,相同跳过, 不相同的话找到从左边开始第一个使得tm原创 2013-08-26 10:34:23 · 1126 阅读 · 0 评论 -
uva 11916 - Emoogle Grid(大步小步算法)
题目连接:uva 11916 - Emoogle Grid题目大意:有一问题,在M行N列的网格上涂K种颜色,其中有B个格子不用涂色,其它每个格子涂一种颜色,同一列的上下两个相邻的格子不能涂相同的颜色。给出M,N,K和B个格子的位置,求出总方案数模掉1e8+7的结果R。现在已知R,求最小的M。解题思路:有确定不用涂色格子的区域作为不变部分,总数通过计算为tmp,外加可变部分的第一行,原创 2014-07-01 21:01:22 · 1980 阅读 · 0 评论 -
uva 1319 Maximum(贪心)
题目连接:2911 - Maximum题目大意:给出m, p, a, b,然后xi满足题目中的两个公式, 要求求的 xp1 + xp2 +...+ xpm 的最大值。解题思路:可以将x1 + x2 +...+ xm = b * 两端同时乘以根号a去计算。然后按照贪心的思想去计算。#include #include int l, r;double m, p, a原创 2013-08-31 21:41:05 · 1875 阅读 · 2 评论 -
uva 10132 File Fragmentation(检索)
题目连接:10132 File Fragmentation题目大意:有n个有0, 1 组成的文件, 每个文件被随意分两片,现在给出所有的2n碎片,要求找出原有的序列。解题思路:右两端寻找,最短的一定匹配最长的。#include #include #include #include #include using namespace std;const原创 2013-08-22 23:42:29 · 1153 阅读 · 0 评论 -
uva 10827 - Maximum sum on a torus(连续最大和问题)
题目连接:10827 - Maximum sum on a torus题目大意:给出一个矩阵,矩阵的上下边, 左右边使联通的, 要求在这个矩阵上找到一个子矩阵, 要求该子矩阵上所有元素的和最大。解题思路:uva108 - Maximum Sum的升级版,将矩阵复制三份, 用四层循环遍历过所有满足条件的区间,遍历的过程中记录出现的最大值。#include #原创 2013-08-26 10:54:07 · 1380 阅读 · 0 评论 -
uvalive 3971 - Assemble(二分搜索 + 贪心)
题目连接:3971 - Assemble题目大意:有若干个零件, 每个零件给出的信息有种类, 名称, 价格, 质量, 现在给出一个金额, 要求在这个金额范围内, 将每个种类零件都买一个, 并且尽量让这些零件中质量最小的越大, 输出质量最小的值。解题思路:首先可以用二分搜索确定质量, 然后在搜索的过程中要判断这个质量是否能被满足, 判断函数可以用贪心, 在每一类的零件中选择原创 2013-08-31 17:47:58 · 1899 阅读 · 0 评论 -
uvalive 3635 - Pie(二分搜索)
题目连接:3635 - Pie题目大意: 有m个派, 要分给n + 1个人, 要求每个人拿到的大小相同, 并且每个人的派必须是一整块, 不能说分别从两个派切出一块凑成。 现在给出m个派的半径(派均为圆柱,高为1),输出每人可以拿到的最大派的体积。解题思路:二分查找。#include #include #include const int N = 10005原创 2013-08-31 16:31:28 · 1405 阅读 · 0 评论 -
uva 10057 A mid-summer night's dream.(检索)
题目连接:10057 A mid-summer night's dream.题目大意:找到使得给出算式最小的值,如果有多个,输出最小的,然后在输出所给的数组A中有多少个数值可以满足算式最小(相等的要分开计算),随后输出有多少个整数满足算式值虽小(没有在数组A中出现也要计算)。解题思路:本体主要题目转换后就是找数组A的中位数,如果给出的n为奇数, 所要找的就是中间的那个值,然原创 2013-08-23 00:05:02 · 1112 阅读 · 0 评论 -
uva 270 Lining Up(暴力+ 几何)
题目连接:270 - Lining Up题目大意:给出一系列点,要求找出共线的点数最大的值。解题思路:暴力,遍历每两个点确定的直线上又多少点, 每次更新最大值。三个点共线的性质:A(X1,Y1),B(X2,Y2),C(X3,Y3);这个时候有(Y2-Y1)/(X2-X1) = (Y3-Y2)/(X3-X2)最好转化成(Y2 - Y1) * (X3 - X2) =原创 2013-08-24 13:55:18 · 1440 阅读 · 0 评论 -
uva 10714 Ants(贪心)
题目连接:10714 - Ants题目大意:一根棍子上有n只蚂蚁, 这些蚂蚁开始可以任意朝着一个方向移动一直走,向左或是向右,并且移动速度是相同的,但是一旦蚂蚁碰到迎面走来的另一只蚂蚁,那么这两只蚂蚁都会马上改变移动方向,朝反方向移动。求所有蚂蚁离开木棍的最小和最长时间。解题思路:其实题目给出的两只蚂蚁碰头的可能是迷惑人的,因为开始所有蚂蚁都朝一个方向移动,速度又相同,根本原创 2013-08-24 10:54:29 · 1224 阅读 · 0 评论 -
uva 108 - Maximum Sum(检索)
题目连接:108 - Maximum Sum题目大意:对应矩阵的值为矩阵中所有元素的和, 要求所给出的矩阵中, 和最大的子矩阵,输出最大和。解题思路:可以看成是求若干次连续序列最大和,第一次求1行,第二次就是1 和2 行对应元素的和的数组,第三次就是1 、 2 和3 行、、、、、、然后知道1 加到n行, 就换2行, 然后是2 + 3 行,以此类推。#includ原创 2013-08-24 01:03:12 · 1141 阅读 · 0 评论 -
uva 10041 Vito's Family(检索)
题目连接:10041 - Vito's Family题目大意:给出所有邻居的位置,要求找到一个位置,使得该位置到所有邻居家的总和最小。解题思路:就是单纯的找中位数,记得先排序, 然后将数组遍历一遍求的最小值。#include #include #include #include using namespace std;const int N = 30原创 2013-08-24 00:49:36 · 1107 阅读 · 0 评论 -
uva 10700 Camel trading(STL 栈)
题目连接:10700 - Camel trading题目大意:给出一个只含有‘+’和‘*’的算式,要求不考虑优先级的情况下,求的算式的最大值和最小值。解题思路:最大值无非先处理所有的加法, 最小值先处理所有的乘法(因为所有数值均为正数)。#include #include using namespace std;int main() { int原创 2013-08-23 23:54:48 · 1060 阅读 · 0 评论 -
uva 507 Jill Rides Again(检索)
题目连接:507 - Jill Rides Again题目大意:简单说就是求连续序列的最大和, 但是不同的是要输出从第几个开始到第几个结束。解题思路:只要在分治的时候一起返回最大值的区间就可以了, 但是要注意下连续序列被分割成左右两边时考虑最大求解时候的下标问题。#include #include const int N = 20005;int maxs原创 2013-08-24 00:55:20 · 1099 阅读 · 0 评论 -
uva 993 Product of digits(分解因子)
题目连接:993 - Product of digits题目大意:给出一个正整数, 要求找到一个自然数,使得该自然数的每一位的数字的乘积等于正整数。并且要求最小,不存在输出-1.解题思路:将正整数分解因子,注意这里要从9开始, 因为要求值最小,即对应的位数也要最小,所以分解的的因子要尽量最大, 但是不能超过9,10以上是两位数。1是比较特殊的情况, 因为终止条件是n =原创 2013-08-24 00:31:30 · 4732 阅读 · 0 评论 -
uva 10400 Game Show Math(记忆化搜索)
题目连接:10400 - Game Show Math题目大意:给出n个数值,可以任意的在数值之间添加+,- ,* ,/,运算,要求找到一个算式可以使得算式的值等于目标值。注意:1、算式的运算符没有优先级,都是从左到右结合。2、数值之间的位置不能更换,也就是说数值的顺序是确定的,只能修改运算符。3、运算的过程中不能出现运算值的绝对值大于32000的。解题思路:原创 2013-08-24 00:18:35 · 1225 阅读 · 2 评论 -
uva 10720 - Graph Construction(贪心-Havel-Hakimi)
题目连接:10720 - Graph Construction题目大意:给出一张有n个点的图,然后再给出每个点的度数。求这个图是否可能存在。解题思路:Havel-Hakimi 定理, 每次选取最大的d[i]和依次比它的d[i]个点连接。#include #include #include using namespace std;const int N =原创 2013-08-26 09:47:38 · 1550 阅读 · 0 评论 -
uva 11129 - An antiarithmetic permutation(递归)
题目连接:11129 - An antiarithmetic permutation题目大意:给出一个数值n, 要求用0~n - 1这n个数组成一个序列,使得这个序列的所有长度大于三的子序列都不是等差数列。解题思路:每次把数列的奇数位和偶数位分开放到两边, 递归到最后就是答案。#include #include const int N = 10010;in原创 2013-08-26 10:43:09 · 1094 阅读 · 0 评论 -
uva 10487 Closest Sums(二分搜索)
题目连接:10487 - Closest Sums题目大意:给出n 个数值, 在对应给出m个查找数值,要求每个查找数值在最先给出的n个数值中找到两个数值,是的这两个数值的和是所有任意两两数值的和中最接进查找数值的。解题思路:将n个数任意两两数值的和计算出来后储存在数组当中,然后从小到大排列,最后用二分的方法查找,注意有两个的话输出最小的。#include #i原创 2013-08-23 23:49:51 · 1132 阅读 · 0 评论 -
uvalive 2088 - Entropy(huffman编码)
题目连接:2088 - Entropy题目大意:给出一个字符串, 包括A~Z和_, 现在要根据字符出现的频率为他们进行编码,要求编码后字节最小, 然后输出字符均为8字节表示时的总字节数, 以及最小的编码方式所需的总字节数,并输出两者的比率, 保留一位小数。解题思路:huffman编码。#include #include #include using nam原创 2013-09-02 17:41:56 · 1402 阅读 · 0 评论 -
uvalive 2949 - Elevator Stopping Plan(贪心+二分)
题目连接:2949 - Elevator Stopping Plan题目大意:某个抠门的公司只有一个电梯, 现在有n 个人从1楼, 他们有各自想要到达的楼层, 然后电梯每上一楼需要4 秒, 每在一个楼层开门需要10 秒, 然后然爬楼梯的话需要20一楼。问, 如何用最短的时间让所有人都到达各自想要到的楼层。解题思路:因为人可以爬楼梯, 所以可以在某个楼层下楼之后走楼梯到达想要原创 2013-09-01 15:35:05 · 1618 阅读 · 0 评论 -
uvalive 2519 - Radar Installation(区间选点问题)
题目连接:2519 - Radar Installation题目大意:给出n和半径r, 然后给出n个坐标, 现在要求在x轴选出最少的点, 以这些点为圆心, 半径为r画圆, 要求将所有点均在画的圆内。解题思路:区间选点问题,就是变形了一下。#include #include #include #include using namespace std;co原创 2013-08-31 21:09:44 · 1202 阅读 · 0 评论 -
uvalive 2326 - Moving Tables(区间覆盖问题)
题目连接:2326 - Moving Tables题目大意:在一个走廊上有400个教室, 先在有一些桌子要移动, 每次移动需要十分钟, 但是不同房间的桌子可以在同一个十分钟内移动,只要走廊没有被占用就可以, 注意教室序号1 和 2 是在对面。注意:给出的区间没有分左边或者是右边比较大。解题思路:区间覆盖问题, 将所有给出的区间处理一下, 去除对面房间这样的情况。 让后将原创 2013-08-31 20:31:37 · 1230 阅读 · 0 评论 -
uvalive 2322 Wooden Sticks(贪心)
题目连接:2322 Wooden Sticks题目大意:给出要求切的n个小木棍 , 每个小木棍有长度和重量,因为当要切的长度和重量分别大于前面一个的长度和重量的时候可以不用调整大木棍直接切割, 否则要进行调整。现在要求求出一个序列, 使得调整的次数最少, 输出调整的次数。解题思路:将n个小木棍先按照 长度和重量的大小排序,然后按照顺序将小木棍分堆,可入堆的要求是长度和重量大原创 2013-08-31 15:06:37 · 1109 阅读 · 0 评论