最长上升子序列(LIS)
文章平均质量分 70
HelloWorld10086
追随大神的脚步
展开
-
UVA - 10131 Is Bigger Smarter?(dp+最大升序子序列)
题目分析:找出重量从小到大、智商从大到小排列的最长子序列。并输出这些序列的编号。解题思路:1、对大象按IQ从大到小排序。2、用最大升序子序列的方法,按照重量从小到大,求出最多的大象,用路径path[i]记下j(i之前那头大象)。3、输出最长序列的长度,并递归输出路径。原创 2014-11-06 15:41:34 · 612 阅读 · 0 评论 -
UVA 10051 Tower of Cubes(最长上升子序列)
题意:给定n个立方体,每个面有一个颜色,每个有质量,质量输入先后由轻到重,颜色由数字表示,现在叠放,每个立方体的底面要和下一个立方体的顶面一样颜色,并且下面一个要比上面一个重,求最多叠放几个,并从上到下输出每个立方体顶面的颜色。思路:每个立方体的一面和它对应的一面构成了一条边,立方体之间又构成一些边,然后需要在这些立方体之间寻找一条最长路径。用d[i][j]表示第i个立方体原创 2015-01-07 16:03:06 · 677 阅读 · 0 评论 -
UVA 10534 Wavio Sequence(最长上升子序列O(nlogn))
题意:寻找一个最长(假设长度为2N+1)的子序列,使得前N个元素递增,后N个元素递减。解析:一个找从前到后的上升子序列,另一个找从后到前的上升子序列。最后扫一遍,取两个状态之中较小的,即可找出最长的先上升后下降的子序列。可是如果用O(n^2)的算法会超时。所以要用O(nlogn)的LIS算法。O(nlogn)的LIS算法(贪心+二分查找):开辟一个栈,每次取栈顶元素s和原创 2015-01-07 16:11:41 · 606 阅读 · 0 评论 -
UVA 10029 Edit Step Ladders(最长上升子序列)
题目大意:递变(edit step)是指通过增加、减少或改变单词 x 中的一个字母,使它变成字典中的另一个单词 y。比如将 dig 变为 dog,将 dog 变成 do 都是递变。递变阶梯(edit step ladder)是一个按字典序排列的单词序列 w1,w2,... ,wn,满足对于从 1 到 n - 1 的所有 i,单词 wi 到 w(i+1)都是一次递变。 现在给出一部字典原创 2015-02-04 10:39:14 · 616 阅读 · 0 评论 -
UVA 437 The Tower of Babylon(最长上升子序列)
题目大意:输入若干种立方体(每种若干个),然后将立方体堆成一个塔,要求接触的两个面下底面的长宽分别严格大于上底面,求塔的最大高度。解析:将每种立方体的各种摆放形式均视为不同的立方体,并存起来。再将所有立方体按照下底面的面积从小到大排序(因为在塔上面的立方体的底面积一定比下面的小),然后求该序列的最大上升子序列的高度。#include #include #include using原创 2014-12-28 12:22:56 · 542 阅读 · 0 评论 -
UVA - 10599 Robots(II)(最长上升自序列)
题意: 给出一个矩阵N行M列,指定点上有垃圾,我们有一个机器人可以清理这些垃圾, 它从(1,1)点出发,运动的方向只能是向下或者向右走,途中它要捡垃圾,目的是要令它捡的垃圾数最多,然后在能保证捡到的垃圾数最多的情况下,统计出有多少种方法,然后输出其中任意的一种方案。 另外,这里面要给所有的格子编号,从第1行开始从左往右编号1,2,3…然后接着下一行,所以所有的编号分别是1,2,3…n*m。原创 2015-02-25 19:28:13 · 563 阅读 · 0 评论