大意:
n个军人按他们的序号排成一列
现在挑出一些人,剩下的军人相对位置不变。
则剩下队列中的军人至少可以看到这个队的某一端(当从军人的位置到端点的位置,不存在比他高或者与其身高相等的人时,军人可以看到这一端)
问:至少挑多少人,输出被挑出人的总数
分析:
从挑人这个角度不好思考
反过来看剩余队伍中的人,其实就是 最长有序子序列
有序可以是从高到低,也可以是从低到高,选最长的那一种
其中,若果是由高到低,最左端的人可以看到两端,因此允许有其左边有一个人和他一样高
如果是由低到高,最右边的人可以看到两端,因此允许右边人的左边有一个人和他一样高
动态规划问题,不过要考虑从高到低和从低到高两种情况,选最大的那种。
同时,还要注意端点的问题。
-------------------------------------------------------------------------------------------------------------------------
然后我想错了。。。
-------------------------------------------------------------------------------------------------------------------------
这个队列单纯的递增或者递减都不是最长的,最长的应该是现增再减的情况
所以应该从左到右求最长递增子序列,再从右到左求最长递增子序列,最后综合起来
--------------------------------------------------------------------------------------------------------------------------
代码参考博客 传送