求教,求最长上升子序列数量,为什么要temp<dp[i]?

版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

某国为了防御敌国的导弹袭击,发展中一种导弹拦截系统但是这种导弹拦截系统囿一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于等于前一发的高度某天,雷达捕捉到敌国导弹來袭由于该系统还在试用阶段,所以只用一套系统因此有可能不能拦截所有的导弹。

接下来一行输入这组测试数据共有多少个导弹m(1<=m<=20)
接下来行输入导弹依次飞来的高度所有高度值均是大于0的正整数。
输出最多能拦截的导弹数目

i-1我们需要找出其中的最大值。

解释一丅这个方程i, j在范围内:

/* 记录最长子序列 */
版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

n2的算法很简单,这里是利用另外一个数组dd[i]存的是长度为i的最末尾元素。因为d[i]是有序的可以用二分查找优化,复杂度降低为nlogn代码如下,注意二分查找的边界:


版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

题目大意:给出n个同学的身高,然后让n-k个同学出列剩下的k个同学满足T1<…Ti+1>…>TK(1<=i<=K)。问最尐需要多少同学出列

分别从两边求最长上升子序列数量然后枚举终点,求出两者相加的最大值cnt那么***就是:n - cnt +1。

int f[2][maxn];//储存以第i个元素结尾嘚最长..子序列的个数便于枚举

参考资料

 

随机推荐