算法设计与优化策略
Nicolas Lee
Yesterday you said tomorrow
展开
-
Average UVA - 1451 数形结合
题目链接 大意: 给定一个长度为n的01串,选一个长度至少为L的连续子串,使得子串中数字的平均值最大。 如果有多解,子串长度应尽量小;如果仍有多解,起点编号尽量小。序列中的字符编号为1~n,因此[1,n]就是完整的字符串。1≤n≤100000,1≤L≤1000。例如,对于如下长度为17的序列00101011011011010,如果L=7,最大平均值为6/8(子序列为[7,14],其长度为8)...原创 2019-01-31 13:48:44 · 272 阅读 · 0 评论 -
Defense Lines UVA - 1471 防线
题目:https://vjudge.net/problem/UVA-1471#author=0 题意:给定一个序列,要求删去一个连续子序列后,得到的序列有一个最长的连续递增序列,输出最长连续递增序列长度 【分析】 为了方便叙述,下面用L序列表示“连续递增子序列”。删除一个子序列之后,得到的最长L序列应该是由两个序列拼起来的,如图8-15所示。 最容易想到的算法是枚举j和i(前提是A[j]&...原创 2019-01-30 17:20:50 · 232 阅读 · 0 评论 -
Unique Snowflakes UVA - 11572 唯一的雪花 滑动窗口
题目:https://vjudge.net/problem/UVA-11572 【分析】 假设序列元素从0开始编号,所求连续子序列的左端点为L,右端点为R。首先考虑起点L=0的情况。可以从R=0开始不断增加R,相当于把所求序列的右端点往右延伸。当无法延伸(即A[R+1]在子序列A[L~R]中出现过)时,只需增大L,并且继续延伸R。既然当前的A[L~R]是可行解,L增大之后必然还是可行解,所以不必...原创 2019-01-30 16:44:09 · 233 阅读 · 0 评论 -
Amphiphilic Carbon Molecules UVA - 1606 两亲性分子 扫描法
题目:https://vjudge.net/problem/UVA-1606 扫描法。扫描法类似于一种带有顺序的枚举法。例如,从左到右考虑数组的各个元素,也可以说从左到右“扫描”。它和普通枚举法的重要区别是:扫描法往往在枚举时维护一些重要的量,从而简化计算。 【分析】 不妨假设隔板一定经过至少两个点(否则可以移动隔板使其经过两个点,并且总数不会变小),则最简单的想法是:枚举两个点,然后输出两...原创 2019-01-28 20:22:59 · 215 阅读 · 0 评论 -
Wine trading in Gergovia UVA - 11054 Gergovia的酒交易---等价转换
题目:https://vjudge.net/problem/UVA-11054 【分析】 考虑最左边的村庄。如果需要买酒,即a1>0,则一定有劳动力从村庄2往左运给村庄1,而不管这些酒是从哪里来的(可能就是村庄2产的,也可能是更右边的村庄运到村庄2的)。这样,问题就等价于只有村庄2~n,且第2个村庄的需求为a1+a2的情形。不难发现,ai<0时这个推理也成立(劳动力同样需要|ai|个...原创 2019-01-27 20:14:02 · 230 阅读 · 0 评论 -
Fabled Rooks UVA - 11134 传说中的车 问题分解
题目:https://vjudge.net/problem/UVA-11134 【分析】 两个车相互攻击的条件是处于同一行或者同一列,因此不相互攻击的条件就是不在同一行,也不在同一列。可以看出:行和列是无关的,因此可以把原题分解成两个一维问题。在区间[1~n]内选择n个不同的整数,使得第i个整数在闭区间[n1i, n2i]内。 思路:将[min,max]用max大小进行排序,排好序后在1~n...原创 2019-01-27 19:40:22 · 219 阅读 · 0 评论 -
4 Values whose Sum is 0 UVA - 1152 中途相遇法
题目:https://vjudge.net/problem/UVA-1152 【分析】 最容易想到的算法就是写一个四重循环枚举a, b, c, d,看看加起来是否等于0,时间复杂度为O(n4),超时。一个稍好的方法是枚举a, b, c,则只需要在集合D里找找是否有元素-a-bc,如果存在,则方案加1。如果排序后使用二分查找,时间复杂度为O(n3logn)。 把刚才的方法加以推广,就可以得到一个...原创 2019-01-26 19:52:47 · 465 阅读 · 0 评论 -
Stacks of Flapjacks UVA - 120 煎饼 构造法
题目:https://vjudge.net/problem/UVA-120 【分析】 这道题目要求排序,但是基本操作却是“颠倒一个连续子序列”。不过没有关系,我们还是可以按照选择排序的思想,以从大到小的顺序依次把每个数排到正确的位置。方法是先翻到最上面,然后翻到正确的位置。由于是按照从大到小的顺序处理,当处理第i大的煎饼时,是不会影响到第1, 2, 3,…, i-1大的煎饼的(它们已经正确地翻到...原创 2019-01-25 20:43:26 · 188 阅读 · 0 评论 -
Building for UN UVA - 1605 联合国大楼 构造法
题目:https://vjudge.net/problem/UVA-1605 思路:一共只有两层,每层都是n*n的,第一层第i行全是国家i,第二层第j列全是国家j。这样每个国家肯定相邻 #include <iostream> using namespace std; char country(int i){ return i>=26 ? 'a'+i-26 : 'A'+...原创 2019-01-26 17:32:18 · 277 阅读 · 0 评论 -
Jurassic Remains UVALive - 2965 侏罗纪 状压+中途相遇法
题目链接 Paleontologists in Siberia have recently found a number of fragments of Jurassic period dinosaur skele- ton. The paleontologists have decided to forward them to the paleontology museum. U...原创 2019-05-06 15:48:57 · 205 阅读 · 0 评论