#include <iostream> using namespace std; int main() { int n,i,j; int a[1000]; int k;//配备系统的个数 int b[1001] = {0};//每套系统最高拦截高度 int p;//拦截第i颗导弹所使用的当前系统 cin>>n; //输入导弹高度 for(int i = 0;i < n;i++){ cin>>a[i]; } k = 1;//第一套系统 //第一套系统最高拦截的高度是:第一颗导弹的高度 b[k] = a[0]; for(i = 1;i < n;i++){ p = 0;//假设没有系统能拦截当前的导弹 for(j = 1;j <= k;j++) { //如果有能拦截的系统 if(b[j] >= a[i]){ //如果还没有过其他系统拦截 if(p == 0){ p = j;//第j套系统可以拦截 } else if(b[j] < b[p]){ p = j;//使用更小的消耗去拦截 } } } //如果没有导弹能够拦截 if(p == 0){ k++; b[k] = a[i]; } else{ //更新第p个拦截系统的拦截高度 b[p] = a[i]; } } cout<<k<<endl; return 0; } /************************************************************** Problem: 1229 User: admin Language: C++ Result: Accepted Time:28 ms Memory:2072 kb ****************************************************************/