c语言导弹拦截最少系统,c/c++开发分享P1020 导弹拦截

p1020 导弹拦截

链接:

题意:某导弹拦截

思路:最长不上升子序列+最长上升子序列

最长不上升子序列用来求该系统最多能拦截几枚导弹,最长上升子序列用来求需要几个系统才能拦截所有的导弹。

为什么会是最长上升子序列?我打个比方,突然有一个导弹的高度大于你当前的拦截最大高度,你肯定拦截不了,所以你肯定需要再来一个系统才能拦截下来。所以只需求最长上升子序列的长度即是需要的系统数量。

代码:(写的比较丑。。。。)

#include using namespace std; #define maxn 100005 int n,num; int a[maxn]; int dp1[maxn]; int dp2[maxn]; struct cmp{ bool operator()(int a,int b){return a>b;} }; int main() { n=1; while(cin>>a[n])n++; n--; if(n==0) { cout<<0<dp2[len2])dp2[++len2]=a[i]; else { int j=lower_bound(dp2+1,dp2+len2+1,a[i])-dp2; dp2[j]=a[i]; } } cout<

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/c-cyuyankaifa/602979.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值