导弹拦截

Posted wsy107316

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了导弹拦截相关的知识,希望对你有一定的参考价值。

https://www.cnblogs.com/wsy107316/p/11502628.html

导弹拦截

技术图片

 

 技术图片

 

 解题思路:用nlogn的方法求第一问:最长不上升序列:方法链接

 

      用贪心法求第二问,遍历一遍

AC_Code:

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <string>
 4 #include <cstring>
 5 #include <cmath>
 6 #include <memory>
 7 #include <queue>
 8 #include <vector>
 9 #include <set>
10 #include <map>
11 #include <stack>
12 #include <algorithm>
13 using namespace std;
14 typedef long long ll;
15 const int maxn = 100010;
16 
17 int a[maxn];
18 int dp[maxn];
19 int num;
20 
21 int main()
22 {
23     int n=0;
24     while( ~scanf("%d",&a[++n]) );
25     n--;
26 
27     int Array[maxn],cnt=0;
28     Array[0]=a[n];
29     for(int i=n-1;i>=1;i--){
30         if( a[i]>=Array[cnt]){
31             Array[++cnt]=a[i];
32         }
33         else{
34             int Index=upper_bound(Array,Array+cnt+1,a[i])-Array;
35             Array[Index]= a[i];
36         }
37     }
38     printf("%d
",cnt+1);
39 
40     int i=2,j,flag[maxn]={0};
41     int k=0;
42     flag[k++]=a[1];
43     while( i<=n ){
44         for(j=0;j<k;j++){
45             if( a[i]<=flag[j] ){
46                 flag[j]=a[i];
47                 break;
48             }
49         }
50         if( j==k ) flag[k++] = a[i];
51         i++;
52     }
53 
54     printf("%d
",k);
55     return 0;
56 }

 

以上是关于导弹拦截的主要内容,如果未能解决你的问题,请参考以下文章

codevs1409 拦截导弹 2

拦截导弹

C语言 拦截导弹

贪心4--拦截导弹

codevs1044 拦截导弹==洛谷 P1020 导弹拦截

导弹拦截III