题目:
解题思路:
第一问:没什么好说的,基础的线性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(