算法设计
文章平均质量分 67
miss_minor
坚持,请你坚持
展开
-
uva10041-Vito‘s family(全部枚举)
题目:uva10041-vito‘s family题目大意:vito要访问他的所有的邻居,现在要求你安排他住在某个地方,使得他到每个邻居的家的总距离最小。给出这个最小距离。解题思路:两层循环一次,枚举出每个点作为vito的家的情况下的总距离。然后放一个剪枝,当距离已经超过目前最小的总距离就可以不往下做。代码:#include #include cons原创 2014-07-17 14:52:41 · 1210 阅读 · 0 评论 -
uva:11129 - An antiarithmetic permutation(分治法)
题目:11129 - An antiarithmetic permutation原创 2014-07-05 21:37:52 · 870 阅读 · 0 评论 -
993 - Product of digits(贪心)
题目:993 - Product of digits题目大意:将一个数通过因式分解变成另一个由因子组成的最小的数。解题思路:因为要组成数,所以因子只需要从 2 - 9,又因为需要最小的数,所以因式分解从最大的因子开始,这样位数最少,最后输出从最小的因子输出,保证最小。1的话需要特判,因为所有的数都有因子1.代码:#include #include co原创 2014-07-03 10:57:00 · 762 阅读 · 0 评论 -
uva10716Evil Straw Warts Live(贪心)
题目:uva10716Evil Straw Warts Live(贪心)题目大意:给出一个字符串,问如何交换字母位置能够得到回文。这里求最少的交换次数。如果不能通过交换得到回文,输出Impossible。交换只允许和相邻的字母进行交换。解题思路:贪心策略:每次都是先将距离两边距离和最短的对称的字母移到到两边,这样这两个字母就对称了,且交换次数是最少的。然后就将这两个字母原创 2014-07-28 11:13:38 · 653 阅读 · 0 评论 -
uva:10763 - Foreign Exchange(排序)
题目:10763 - Foreign Exchange原创 2014-07-07 22:24:57 · 783 阅读 · 0 评论 -
uva10148Advertisement(区间选点)
题目:uva10148Advertisement(区间选点)题目大意:给出n个慢跑选手的慢跑区间,要求每个选手的区间至少要由k个广告,但是如果这个选手的慢跑区间长度放不下K个广告的话(特殊区间),那么就将这个选手的区间内都放满广告就可以了。问要满足上诉的要求,最少需要多少数量的广告,并且要找广告编号从小到大输出。解题思路:区间选点问题。先将这些区间【a,b】按照b从小到大排原创 2014-07-28 09:58:44 · 1127 阅读 · 0 评论 -
uva10026 - Shoemaker's Problem(贪心)
题目:10026 - Shoemaker's Problem题目大意:有个鞋匠在同一天接到了一堆的生意。可是他每天只能做一双鞋,给出做每双鞋需要的时间和推辞做鞋的赔偿。问怎样合理的分配才能使得赔偿最小。解题思路:鞋子编号 要花的时间 需要的赔偿(每天) 1 1原创 2014-07-26 22:03:57 · 960 阅读 · 1 评论 -
uva-10905Children's Game(贪心)
题目:uva-10905Children's Game(贪心)题目大意:给出N个正整数,问将这N个整数连接后得到的最大的数。解题思路:排序,将两两连接有AB 或是BA,将如果AB > BA ,那么就将A排在B的后面,反之则反之。代码:#include #include #include using namespace std;const int N原创 2014-07-28 09:32:59 · 730 阅读 · 0 评论 -
uva10720 - Graph Construction(Havel-Hakimi定理)
题目:uva10720 - Graph Construction(Havel-Hakimi定理)题目大意:给出N个点,并且给出每个点的度,问能否形成简单图。解题思路:一开始自己写想了些形成简单图的条件,例如度数之和是偶数,度数的一半也就是简单图的边不能超过n * (n - 1) / 2,每个顶点的度数都应该小于总的顶点个数,但后面发现这些只是必要的条件。后来看了题解发现大神原创 2014-07-26 21:24:24 · 709 阅读 · 0 评论 -
uva10382 - Watering Grass(区间覆盖变形)
题目:uva10382 - Watering Grass(区间覆盖变形)题目大意:要给一片草坪浇水,给定草坪的长度和宽度,给出每个喷头的圆心C和喷水的半径R,问最少要几个喷头可以给整片草坪都浇上水。解题思路:区间覆盖问题的变形,因为草坪有宽度W,所以这个每个喷头的有效范围是[C- sqrt(R* R - 0.25 * W * W , C + sqrt (R*R - 0原创 2014-07-26 21:51:17 · 1552 阅读 · 3 评论 -
uva10132File Fragmentation(贪心)
题目:uva10132File Fragmentation题目大意:有n个文件,都是相同的,但是不小心打破了,而且每个文件的裂痕不一样,每个文件都损坏成两个碎片。每个文件的碎片都用2进制数表示,然后给出2*n个碎片,问这样的碎片能得到的文件(n个)。如果答案不唯一,给出其中一个就可以。解题思路:因为每两个碎片形成一个文件,那么找出最长的碎片,那么它必然和最小的文件匹配组成文原创 2014-07-28 09:43:24 · 755 阅读 · 0 评论 -
uva10057 - A mid-summer night's dream
题目:uva10057 - A mid-summer night's dream题目大意:给出n个数,A使得 (|X1-A| + |X2-A| + … … + |Xn-A|) is minimum,求最小的A,输入中A的个数,不同的A的个数。(A可能有多个值)解题思路:要使得上面的式子最小,找出这个N个数的中位数。如果是奇数个数,那么中位数只有一个,不同的A的个数也只有一个原创 2014-07-28 21:40:05 · 791 阅读 · 0 评论 -
uva714 - Copying Books(最大值最小化)
题目:uva714 - Copying Books(最大值最小化)题目大意:给出n本书,每本书的值代表这本书的页数。然后给定m个scribers,每个scriber至少要抄一本书,或者连续的几本书。每个scriber的工作量就等于他要抄的书的页数之和。问怎样划分能使的scribers中工作量的最大值最小。这里要求答案如果有多种的话就输出前面的和比较小的那个划分。解题思路:最原创 2014-07-28 21:21:10 · 693 阅读 · 0 评论 -
uva10245 - The Closest Pair Problem(暴力+剪枝)
题目:uva10245 - The Closest Pair Problem(暴力+剪枝)题目大意:给出N个点,求这些点中最小的两点距离。解题思路:把这些点中两两之间的距离都算出来,这样的复杂度是O(n^2),会超时,所以加了一个减枝。 先将所有的点按照x坐标排序。然后在计算的过程中,如果发现要计算的这两点的X坐标之差的绝对值已经大于等原创 2014-07-30 09:45:25 · 837 阅读 · 0 评论 -
uva270 - Lining Up(暴力)
题目:uva270 - Lining Up解题思路:对于每个点都计算一下,它与其他点的斜率,这样就可以判断与这个点在同一条直线的点。每个点都这样做,维护最大值就可以了。 注意斜率不存在的情况。 找相同斜率的时候用了multiset。代码:#include #include #include #原创 2014-07-30 09:33:33 · 833 阅读 · 0 评论 -
uva757 - Gone Fishing(贪心)
题目:uva757 - Gone Fishing(贪心)题目大意:有N个湖泊只有一条通路将这些湖泊相连。每个湖泊都会给最开始5分钟间隔内可以调到的鱼(f),然后给每过5分钟减少的鱼的数量(d),如果当前的鱼少于等于减少的数量,说明在下个5分钟没有鱼。还有过每条道路的所要耗费的时间(N-1),时间都是以5分钟为单位的。渔者可以在任意一个湖泊钓鱼,但是起始位置是在湖泊1。问H小时后,渔者怎原创 2014-07-30 19:26:10 · 902 阅读 · 0 评论 -
uva10706 - Number Sequence(找规律)
题目:uva10706 - Number Sequence(找规律)题目大意:有这样一串序列11212312341234512345612345671234567812345678912345678910123456789101112345678910...,问第i个位置数的值。 1原创 2014-07-25 16:59:55 · 1085 阅读 · 0 评论 -
uva10400 - Game Show Math(回溯+剪枝)
题目:uva10400 - Game Show Math(回溯+剪枝)题目大意:给出N个数,并且给出一个目标数值,要求用上面的数字(全部),并且顺序不能乱,然后用+-*/这些操作,问最终能不能得到目标数值。这里要注意给出的数会在【-32000,32000】之间, 并且要用除法的时候,只有在能整除的时候才能用。并且中间计算结果不能超过【-32000,32000】范围。如果超过这个操作不能原创 2014-07-25 16:28:00 · 734 阅读 · 0 评论 -
hdu4882-ZCC Loves Codefires(贪心)
题目:hdu4882-ZCC Loves Codefires题目大意:给出n个问题,每个问题有两个参数,一个ei(所要耗费的时间),一个ki(能得到的score)。每道problem需要耗费:(当前耗费的时间)*ki,问怎样组合问题的处理顺序可以使得耗费达到最少。解题思路: e1 e2 k1 1 2 k2 3原创 2014-07-24 21:51:00 · 978 阅读 · 0 评论 -
uva10341 - solve it (二分查找)
题目:uva10341-solve it题目大意:求解给定的方程式解题思路:因为这个方程式在给定的x的范围内是单调递减的,所以可以用二分查找来尝试x的值。这里的 x是要求保留4小数,所以当区间缩小到一定的范围,这时候就是x的解。无解的情况只可能出现在x范围的两端。代码:#include #include #include double p, q, r, s, t原创 2014-07-17 14:44:31 · 867 阅读 · 0 评论 -
uva108 Maximum sum(矩阵最大和)
题目;uva108 Maximum sum(矩阵最大和)题目大意:给出一个n*n的矩阵,求这个矩阵的最大和。这个矩阵不是连通的,只能在这个矩阵内找子矩阵,不能越过边界。解题思路:枚举起点和终点,每个起点和终点就是一个矩阵,每个矩阵都算矩阵和,然后保留最大值。每个矩阵的值只要横着相加一遍,再竖着相加一遍,就可以得出以这个矩阵为起点的所有的子矩阵的和(这里可以直接要这个矩阵的和原创 2014-07-17 15:31:22 · 961 阅读 · 0 评论 -
uva507 - Jill Rides Again(最长连续和)
题目:uva507 - Jill Rides Again(最长连续和)题目大意:给每两个站之间的满意度,满意的路线必须加起来的和不小于0.帮Jill找出她满意的路线,要求是最长的,并且一样长的话取站相对靠前的。代码:#include #include const int N = 20005;int s, b, e;int stop[N];int solve原创 2014-07-17 15:02:09 · 732 阅读 · 0 评论 -
uva10827-Maximum sum on a torus(矩阵最大和的变形)
题目;uva10827-Maximum sum on a torus(矩阵最大和的变形)题目大意:就是uva108的变形,矩阵能够连通,就是可以从后面连到前面。这里把矩阵复制三遍,然后重新生成一个大的矩阵,就可以解决联通的问题。再枚举矩阵的起点和终点所有情况,保留最大值就可以了。例如:1 2 3 2 3 4新的矩阵: 1 2 3 1 2 3原创 2014-07-17 15:40:58 · 817 阅读 · 0 评论 -
11054 - Wine trading in Gergovia
题目:11054 - Wine trading in Gergovia题目大意:每个房子的主人要么买酒,要么卖酒,买和卖的酒的数量一致。卖酒的人需要将酒运送到买酒的人的家里,每将一瓶酒运到相邻的房子就需要耗费一单元的费用,问怎样能使得整体的运送费用最少。解题思路:不论是卖和买,都需要运送。这样就可以从第一家开始把他手上拥有的酒,或是他想要的酒转移到相邻的那一家。如果刚好一个原创 2014-07-03 10:51:57 · 662 阅读 · 0 评论 -
10714 - Ants(贪心)
题目:10714 - Ants题目大意:一个长度为l的板上,分布着许多的蚂蚁,每只蚂蚁的位置都会给出但是方向不缺定,如果两只蚂蚁碰上了,就会朝各自相反的方向前进。问这样所有的蚂蚁都跌落木板的最短时间和最长时间。解题思路:最短时间的话就是每只蚂蚁都朝着各自离两端最近的方向前进,最后取这些最近的位置的最大值,就是最短时间。这样的话两只蚂蚁是不会碰到的,因为某只蚂蚁的前方那只蚂蚁原创 2014-07-03 11:12:36 · 787 阅读 · 0 评论 -
uva11100 - The Trip, 2007
题目:11100 - The Trip, 2007题目大意:给出n个包,大包可以套小包,要求要最后的包的数目最小,任意给出一种组合方式即可。解题思路:相同大小的包的数目决定了最后剩余的包的数目。 将这些包排成有序的,这样就是一个递增的序列,保证分组后同一组中后面的包一定比前一个大一些。总共m组,输出的时候只要每隔m个数输出一个数。原创 2014-07-23 16:24:08 · 690 阅读 · 0 评论 -
uva:10700 - Camel trading(贪心)
题目:10700 - Camel trading题目大意:给出一些表达式,表达式由数字和加号乘号组成,数字范围【1,20】。这些表达式可能缺少了括号,问这样的表达式加上括号后能得到的最大值和最小值。解题思路:因为这些数的都是正整数,所以可以用贪心。不然看出最大值就是先做完加法在做乘法,最小值就是先做乘法在做加法。注意这里的数值要用long long 因为比表达式的值可能会超过int原创 2014-07-04 01:54:50 · 1460 阅读 · 1 评论 -
uva311 - Packets(贪心)
题目:311 - Packets题目大意:给出1*1, 2*2,3 *3, 4*4, 5*5, 6*6的箱子的个数,现在有若干个6*6的箱子,问最少用多少个箱子可以将给定的箱子都装进去。解题思路:对于6 * 6的箱子,每个都要耗费一个箱子。 对于5 * 5的箱子, 装完这个后还能再装11个1 * 1.原创 2014-07-23 16:40:38 · 837 阅读 · 0 评论 -
uva10954 - Add All(multiset函数)
题目:10954 - Add All题目大意:求n个数的和,但是有点不一样的是题目要求计算最少花费。每次两个数相加,得到的那个数就是每次计算的cost。解题思路:之前没有想到用multiset,自己写好麻烦。要求cost 最小的话,说明每次都将这些数里面最小的两个做相加,这样每次花费都是最小的。用multiset,就可以将每次计算的结果插入这些已经有序的数据中相应的位置,使原创 2014-07-23 21:59:47 · 776 阅读 · 0 评论 -
uva:10487 - Closest Sums(二分查找)
题目:10487 - Closest Sums题目大意:给出一组数据,再给出m个查询的数字。要求找到这组数据里的两个数据相加的和最靠近这个查询的数据,输出那两个数据的和。解题思路:二分查找,这样找到的话,就输出查询的数值,但是要注意找不到的情况:这里最靠近的值不一定是在找不到的时刻的前一次数据,所以要维护最靠近的要查询数的数值。代码:#include #inclu原创 2014-07-04 02:09:36 · 1089 阅读 · 1 评论 -
uva:10340 - All in All(字符串匹配)
题目:10340 - All in All题目大意:给出字符串s和t,问s是否是t的子串。s若去掉某些字符能和t一样,那么t是s的子串。解题思路:匹配字符。t的每个字符和s中的字符匹配。注意这里的字符数组大小要开大点。代码:#include #include const int N = 1000005;char s[N], t[N];bool m原创 2014-07-04 01:59:06 · 1461 阅读 · 0 评论 -
uva10718 - Bit Mask(贪心)
题目:uva10718 - Bit Mask(贪心)题目大意:给出32位无符号的整数n ,给定边界L和R,要求在这个边界里面找出一个整数,它和N做或运算得到的值最大。解题思路:要求做或运算得到的值最大,先N化成2进制的数,然后要使得结果最大的话,最好的就是【L,R】里面的某个数M能和N二进制数01互补.例如: 00000111 那么M最好就是 11原创 2014-07-25 16:06:35 · 825 阅读 · 0 评论 -
uva:10670 - Work Reduction(贪心)
题目:10670 - Work Reduction题目大意:给出n, m, L.n代表老板给的全部的paperworks的数量,m代表最终剩下的数量,L代表由这么多家公司需要你来计算最小的花费。解题思路:1、L家公司l行。每行由公司的名字 :A,B; A代表一份paperwork需要的money,B则代表帮你减少到总共的paperworks的数量一半要话费的money。注意这里原创 2014-07-05 21:23:24 · 716 阅读 · 0 评论 -
uva:10602 - Editor Nottoobad(贪心)
题目:10602 - Editor Nottoobad题目大意:有一个机子它由press的动作还有copy和delete字符的动作。给一组字符串,问要输入这样的一组字符串,最少要执行的press动作。解题思路:将这一组字符串按照ascall码排序后,这样前后两个字符串的相似度是比较高的。然后后一个字符串和前一个字符串相比,看有多少相同的可以copy,就只要统计一下不相同的字原创 2014-07-05 22:01:25 · 713 阅读 · 0 评论 -
uva10020 - Minimal coverage(区间覆盖)
题目:uva10020 - Minimal coverage(区间覆盖)题目大意:给出一些线段,然后问怎样取能使得最少的线段覆盖区间[0, M].解题思路:先预处理掉那些和区间【0,M】不沾边的线段。 将线段按照起点小的排序。 接着遍历这些线段。首先先判断起点最小的点是否原创 2014-07-26 21:41:30 · 1695 阅读 · 1 评论