导弹拦截
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 }
以上是关于导弹拦截的主要内容,如果未能解决你的问题,请参考以下文章