第8章 高效算法设计
文章平均质量分 67
01的世界
有时,失去了才懂得珍惜
展开
-
例题8-2 联合国大楼 UVa 1605
分析:题目要求任意两个国家都有一对相邻的格子,这样的话,可以按照书上的思路,有2层楼,一层是每行是1,2,3....n,另一层对应的第一行1,1,1,1,1,1,....这样的话1就跟所有的数相邻了。第二行全是2,以此类推,就符合要求了。#include#include#include#include#includeusing namespace std;char ch(int i原创 2015-10-05 22:13:22 · 481 阅读 · 0 评论 -
例题 8-2 和为0的4个值 UVa 1152
分析:现将集合AB中的元素求和保存起来,再将CD中的元素求和保存起来,然后再枚举看看两数组中是否存在相反数,在分别计算就可以了。按照书上说的分别将和保存在有序数组和map中,map果然超时了。有序数组2379ms#include#include#include#include#include#includeusing namespace std;const int max原创 2015-10-06 00:18:11 · 328 阅读 · 0 评论 -
例题8-1 煎饼 UVa 120
分析:一开始的想法就是每次找到最大的数放到底部,在实现的时候有点麻烦,需要注意一下,因为有可能某个最大元素在中间,这就需要先翻到顶部,再翻到尾部。#include#include#include#include#includeusing namespace std;int n,a[33];void flip(int p) { for(int i = 0; i < p-i; i原创 2015-10-05 21:17:42 · 501 阅读 · 0 评论 -
例题8-4 传说中的车 UVa 11134
分析:行和列无关,分别在行列中排列1-n,要求是第I个整数在[a1,a2]区间里。所以优先按照右边界排列,其次是左边界,这样的话,再依次给每一行或每一列安排位置。#include#include#include#includeusing namespace std;struct point{ int pos,a1,a2,ans;//顺序,左边界,右边界,排列后的位置};原创 2015-10-06 18:24:08 · 384 阅读 · 0 评论 -
例题8-6 两性亲分子 UVa 1606
分析:每次枚举一个点作为基准点,然后求其他点与这个基准点的夹角,再排一遍序,按照角度从小到大排序,接下来以基准点和其中一个点的连线开始逆时针扫描一遍,直到基准点和另一个点的连线和开始的那条线之间的角度大于等于180停止,这样就可以了,我也看了好一会儿题解才看懂,具体看代码。#include#include#include#include#include#define LL lon原创 2015-10-07 22:58:26 · 464 阅读 · 0 评论 -
例题8-8 防线 UVa1471
题目:给一个长度为N的序列,删除一个连续子序列,使得剩下的一个连续递增子序列最长。分析:f(i)表示以第i个元素为起始的最长序列,g(j)表示以第j个元素为结尾的最长序列,那么就去找 满足 a[j]#include#include#include#include#include#include#includeusing namespace std;const int max原创 2015-10-09 22:10:44 · 356 阅读 · 0 评论