此题需要写两个函数,最长上升序列的长度和最长不上升序列的长度。
LCS函数(计算最长不下降序列的长度,动态规划的思路:首先数组里面的长度都初始化为1,然后开始遍历数组,计算以当前i为最低值时的最长不上升序列的长度,计算的时候再设置一个FOR循环遍i之前的所有值,如果i之前有值大于等于i的值P,那么就是说,i的值可以是P的长度加1。所以最长的长度就是整个0-i 区间里面长度最大的。
这个题还有一个注意点就是,最少需要多少拦截系统,那么就等于最长上升序列的长度。
#include <iostream>
#include <cstdio>
#include <cmath>
#include <vector>
#include <cstring>
#include <algorithm>
#include <string>
#include <set>
#include <functional>
#include <numeric>
#include <sstream>
#include <stack>
#include <map>
#include <queue>
using namespace std;
long long num[3000];
long long x[3000];
long long y[3000];
void LCS(long long k)
{
for(int i=0;i<k;i++)
num[i]=1;
for(int i=0;i<k;i++)
{
long long maxn = -100;
for(int j=0;j<i;j++)
{
if(x[i]<