POJ 1887 Testingthe CATCHER (LIS:最长下降子序列)
http://poj.org/problem?id=3903
题意:
给你一个长度为n (n<=200000) 的数字序列, 要你求该序列中的最长(严格)下降子序列的长度.
分析:
读取所有输入, 将原始数组逆向, 然后求最长严格上升子序列即可.
由于n的规模达到20W, 所以只能用O(nlogn)的算法求.
令g[i]==x表示当前遍历到的长度为i的所有最长上升子序列...
分类:
其他好文 时间:
2014-11-05 17:21:11
阅读次数:
172
转自http://blog.csdn.net/zhang360896270/article/details/6701589这题要求最长下降子序列的长度和个数,我们可以增加数组maxlen[size](记录当前第1个点到第i个点之间的最长下降序列长度)和maxnum[size](记录1~i之间的最长下...
分类:
其他好文 时间:
2014-10-10 12:24:54
阅读次数:
208
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=79思路:最长上升子序列的变形,反过来用就可以了,即最长下降子序列。l[i]表示以第i个数为最小值的最长下降子序列长度。代码: #include #include using namespa....
分类:
其他好文 时间:
2014-08-23 15:23:20
阅读次数:
235
求最长下降子序列和LIS基本思路是完全一样的,都是很经典的DP题目。问题大都类似于 有一个序列 a1,a2,a3...ak..an,求其最长下降子序列(或者求其最长不下降子序列)的长度。以最长下降子序列为例用a[i]存储序列a的第i个元素(i: 1 to n)用f[i]表示算上第i个位置的元素时最长...
分类:
其他好文 时间:
2014-07-16 15:32:40
阅读次数:
304
首先求最多能拦截多少颗导弹,则是求一个最长下降子序列的问题。。则找到动态转移方程。。
dp[i]=max(dp[j])+1,ja[i],因为dp[j]所表示的就是一个有序下降子序列。。。所以加进来也将是一个有序上升数列。。
然后是最少需要多少套导弹系统。。。有点贪心的做法。。就是要拦截导弹,尽量用小的去拦截可以拦截的导弹。。最后得到的导弹系统套数是最少的。。
题目链接:
http://...
分类:
其他好文 时间:
2014-05-18 18:31:47
阅读次数:
210
dp[i]=max(dp[i],dp[j]+1) ja[i]
dp[i]表示长度为i的最长下降子序列的长度。
r[i]表示长度为i的最长下降子序列的方案数。
考虑这样一个问题,比如6 3 9 3,对于两个3,他们数字一样并且dp值也一样,那么r[2]的方案数是没有意义的
因为能通过第一个3扩展的也能通过第二个3扩展,所以直接把r[2]=0。
对于一次扩展若dp[j]+1==dp[i],则...
分类:
其他好文 时间:
2014-05-18 06:31:43
阅读次数:
249
排序后贪心或根据第二关键字找最长下降子序列#pragma comment(linker,
"/STACK:1024000000,1024000000")#include#include#include#include#include#include#include#include#include#i...
分类:
其他好文 时间:
2014-05-08 19:36:06
阅读次数:
267