
LIS/LCS
ITCharge
高效率编程,慢节奏生活。
展开
-
HDU1069_Monkey and Banana【LCS】
Monkey and Banana 题目大意:屋顶上放有香蕉,猴子有N块长宽高分别为x*y*z的砖。猴子想要 垒一座砖塔去吃香蕉。垒塔的时候上边的砖必须严格的比下边的砖小(上边砖 长<下边砖长 && 上边砖宽<下边砖宽)。砖有无数块,问最高能垒多高。 思路:虽然砖有无数块。但是长为x宽为y规模的砖只能用一块。因为上下砖 长和宽都不等。但是一块砖有好多种放法。这里先对x,y,z递增排序。建 一个结构体存摆放方法。让x为宽,y为长,z为高为一种摆法,让x为宽,z为 长,y为高为一种摆法,y为宽,z为长,x为高为原创 2014-10-22 08:34:00 · 932 阅读 · 0 评论 -
POJ1631_Bridging signals【LIS】【二分法+栈】
题目大意:两边都有N个点,给你N个点的连线关系,现在删除一些线,使剩下的线不想交, 求不相交的线最多有多少条。 思路:都知道是最长上升子序列,那么怎么来的呢 比如说现在有6对点,从上到下,左右两边的点是依次递增排序的。如果想让总的不相交的线数 最多,那么从左边第一个点开始,每个点就要尽可能和右边序号最小的点连接,这样以后的点才 能和更多的点连接。但是如果之后两个及两个以上的点所能连接的点都比第一个点连接的右边点 序号小,且不相交,则舍弃第一个,选择之后的点,否则选择前一个。 如题目中的图所示: 左1和右4相原创 2014-11-24 11:46:41 · 1402 阅读 · 0 评论 -
HDU1025_Constructing Roads In JGShining's Kingdom【LIS】【二分法】
题目大意:路两旁各有N个城市,一旁N个富城市,一旁N个穷城市,每个穷 城市缺少一种资源(各不相同),每个富城市拥有一种资源(各不相同),穷城市 p需要从富城市r得到这种资源,就得修路。为了不造成交通堵塞,修的路不能 有交叉,问最多能修几条路,也就是有几个城市得到资源。 思路:就是给你两边各N个点,在这两边连线,每个点只能连一次,问最多有 多少线不交叉。把一边的点按升序排列,那么题目就转换为求另一边的最大上 升子序列了,而这道题数据规模为500000,O(N^2)算法肯定超时,只能用 栈+二分法的O(Nlog原创 2014-11-26 09:18:27 · 1229 阅读 · 0 评论 -
POJ2264 HDU1503 Advanced Fruits【LCS】
题目大意: 两种水果可以杂交出一种新的水果,现在要给新水果起名字,起名的规则是: 这个名字要包含之前两种水果的名字的字母,要按原本字符串中字符的相对顺序。并且这个 名字要尽可能的短。 思路: 先求出两种水果名字s1和s2最长公共子序列的长度,并且用pre[i][j]标记下dp[i][j]的上一个状态, 来得到每个字符在新的字符串中的状态。然后从(len1,len2)回溯输出新的字符串序列。 pre[i][j] == 0表示为上一个字符为公共子串,将s1[i-1]或s2[j-1]输出一次,pre[i][j]原创 2015-04-18 10:53:01 · 1603 阅读 · 0 评论 -
HDU1257_最少拦截系统【LIS】
最少拦截系统 题目大意:导弹拦截系统每次拦截导弹的高度都不高于上一次拦截的高度 给你一个导弹发射高度的序列,问最少用多少了拦截系统能够完成拦截? 思路:往上很多人都说是最长上升(不降序)子序列。但是很不好理解。那么 为什么是最长上升子序列呢。 这是因为假设最长上升子序列长度为N,那么作为最长上升子序列的每个元素 右边的非最长上升子序列的元素必然是下降的。且必然是最优情况。把每个最 长上升子序列的元素作为一个拦截系统的起点,那么它右边比它本身小的下降 序列就是这个拦截系统所能拦截的导弹,到下一个最长上升子序列原创 2014-11-06 11:43:34 · 953 阅读 · 0 评论 -
HDU-1257-最少拦截系统-LIS
最少拦截系统 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 16661 Accepted Submission(s): 6570 Problem Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦原创 2014-05-17 10:07:36 · 972 阅读 · 0 评论 -
HDU1160_FatMouse's Speed【LIS变形】
题目大意:胖老鼠以为越胖的老鼠跑的越快。现在给你一些老鼠的重量和速度, 直到输入到文件结束,问:你能否找到一系列数据,来证明越胖的老鼠跑调越慢 最后输出满足条件的数据个数,并按顺序输出每组数据原本所在的行数。 思路:先用结构体存起来每只老鼠的体重、速度和所在行号。然后对结构体排序。 先按体重递增排序,再按速度递减排序。之后按最长递减序列的求法求出符合的 数据最大个数。用x[]数组存嘴上递减子序列的长度,用y[]记录排序后的最长递减 子序列倒数第二个的下标。这样能够通过往前递推的方法依次找到最长递减子序 列的原创 2014-11-25 22:58:35 · 1044 阅读 · 0 评论 -
HDU1087_Super Jumping! Jumping! Jumping!【LIS】
Super Jumping! Jumping! Jumping! 题目大意:跳棋游戏,每次只能跳到比当前棋子大的棋子上,且只能顺着方向 跳,不能回头。求走过棋子的最大的棋子和。 思路:类似于求最长上升子序列,这里求得是最长上升子序列中,和最大的子 序列。 设dp[i]为当前最长上升子序列元素和中——最大的和。 转移方程:dp[i] = max(dp[i],dp[j]+num[i]) (0 <= j < i) 从前往后,对于位置i,找出位置i前边的最大和加上num[i]。 因为j也是从前向后递推更新的,所以原创 2014-10-20 17:41:39 · 767 阅读 · 0 评论 -
九度1131_合唱队形【LIS】【LCS】
题目1131:合唱队形 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1706 解决:529 题目描述: N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交换位置就能排成合唱队形。 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1, 2, …, K,他们的身高分别为T1, T2, …,原创 2014-05-19 12:38:19 · 975 阅读 · 0 评论