最少拦截系统------LCS--------动态规划

这是一道极好的题,会了这个应该说 最长递增子序列什么的  就有了另外一种思路了

下面附上代码---应该仔细的看一下  那个  if判断

 1 #include<stdio.h>
 2 #include<algorithm>
 3 using namespace std;
 4 int a[1000],d[1000];
 5 int main()
 6 {
 7     int N,i,j,maxn;
 8     while(scanf("%d",&N)!=EOF)
 9     {
10         for(i=1;i<=N;i++)
11         {
12             scanf("%d",&a[i]);         //
13             d[i]=1;    //  假设 一个 导弹 可以解决  所有的
14         }
15         for(i=2;i<=N;i++)         //   一个一个导弹 向下传送
16         {
17             for(j=1;j<i;j++)         // 将这个导弹之前的  导弹全部 遍历一遍
18             {
19                 if(a[i]>a[j]&&d[i]<d[j]+1)   //   如果  现在的导弹的  高度 比 第 j 个导弹的  高度  要高    如果这一个导弹的  飞行高度 奇高 比之前的所有导弹的 高度都高
20                 //  那么这个 导弹 也只需要一个 拦截系统即可  在刚才买的 防御系统之上再加一个 防御系统就好了不能  看到上一个拦不住 就再买看到下一个也拦不住 就又买
21                     d[i]=d[j]+1;  // 在原来的基础之上  再买一个
22             }
23         }
24         maxn=-1;
25         for(i=1;i<=N;i++)
26         {
27             maxn=max(maxn,d[i]);
28         }
29         printf("%d
",maxn);
30     }
31 }

原文地址:https://www.cnblogs.com/A-FM/p/5265942.html