3:拦截导弹(最长上升子序列)
第一行,输入雷达捕捉到的敌国导弹的数量k(k<=25),
第二行,输入k个正整数,表示k枚导弹的高度,按来袭导弹的袭击时间顺序给出,以空格分隔。
8 300 207 155 300 299 170 158 65
6
源代码
#include<stdio.h> #include<iostream> #include<string.h> #include<algorithm> using namespace std; int main() { int n; int MaxLen[50]; int a[50]; scanf("%d",&n); for(int i=1; i<=n; ++i) { MaxLen[i]=1; //初始化长度为一 scanf("%d",&a[i]); } for(int i=2; i<=n; ++i) { for(int j=1; j<i; ++j) { if(a[i]<=a[j]) //只要后面的比前面的小长度就加一 MaxLen[i]=max(MaxLen[i],MaxLen[j]+1); } } printf("%d\n",*max_element(MaxLen+1 , MaxLen+n+1)); //注意这里的输出方式 // cout<< *max_element(MaxLen , MaxLen+n); return 0; }
永远渴望,大智若愚(stay hungry, stay foolish)