拦截导弹:线性DP求最长不上升子序列+贪心

博客探讨了一道编程题目,利用线性动态规划(DP)解决最长不升子序列问题,并通过贪心思想解决如何用最少导弹拦截导弹的优化问题。在第二部分,作者提到了使用一个布尔数组来跟踪导弹状态的技巧,以求得最佳解决方案。
摘要由CSDN通过智能技术生成

题目:在这里插入图片描述
解题思路:

第一问:没什么好说的,基础的线性dp求解经典的最少不上升(下降)子序列;

第二问:贪心思想。

需要n个导弹就想当于把一串数字划分为n个部分,且每个部分都是一段递减的子序列 例如 :6 5 1 7 3 2 需要最少的炮弹–> 6 5
1//7 3 2 显然划分了两个部分。 如果想让需要的炮弹数最少,就是等价于划分的每个部分的长度最长

使用的小技巧:第二问用了一个 bl数组用于标记该炮弹是否已经被打掉,被打掉标记为1,求解时则不需要再考虑。

AC代码:

#include<bits/stdc++.h>
#define N 30010
using namespace std;
typedef long long ll;
ll a[N];
ll dp[N];
ll bl[N];
int main(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值