1836:Alignment

题目Alignment

大意:

n个军人按他们的序号排成一列

现在挑出一些人,剩下的军人相对位置不变。

则剩下队列中的军人至少可以看到这个队的某一端(当从军人的位置到端点的位置,不存在比他高或者与其身高相等的人时,军人可以看到这一端)


问:至少挑多少人,输出被挑出人的总数


分析:

从挑人这个角度不好思考

反过来看剩余队伍中的人,其实就是 最长有序子序列

有序可以是从高到低,也可以是从低到高,选最长的那一种

其中,若果是由高到低,最左端的人可以看到两端,因此允许有其左边有一个人和他一样高

如果是由低到高,最右边的人可以看到两端,因此允许右边人的左边有一个人和他一样高


动态规划问题,不过要考虑从高到低和从低到高两种情况,选最大的那种。

同时,还要注意端点的问题。

-------------------------------------------------------------------------------------------------------------------------

然后我想错了。。。

-------------------------------------------------------------------------------------------------------------------------

这个队列单纯的递增或者递减都不是最长的,最长的应该是现增再减的情况

所以应该从左到右求最长递增子序列,再从右到左求最长递增子序列,最后综合起来

--------------------------------------------------------------------------------------------------------------------------

代码参考博客  传送














 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值