最少拦截系统
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 36566 Accepted Submission(s): 14430
怎么办呢?多搞几套系统呗!你说说倒蛮容易,成本呢?成本是个大问题啊.所以俺就到这里来求救了,请帮助计算一下最少需要多少套拦截系统.
8 389 207 155 300 299 170 158 65
2
//本题用数组表示有几个系统和每个系统最后发射的导弹高度,然后每输入一个高度,都从第一个系统找到最后一个系统,找到所有高于这个高度的系统,再从找到的系统中找到最低的那一个,刷新它,如果没有比这个高度高的系统,则需要再增加一个系统
#include<cstdio> #include<algorithm> #include<cstring> #include<string> #include<queue> #include<cstdlib> #include<map> #include<iostream> using namespace std; int main() { int n; while(~scanf("%d",&n)) { int a[10000]; int i,j; n--; int m; scanf("%d",&m); i=0; a[0]=m;//第一个高度必须开一个系统,共有i+1个系统,i从0开始 while(n--) { int ma=-1;//ma表示第几个系统可以发射,并且是可以发射的系统中高度最低的那个 int t=0; scanf("%d",&m); for(j=0;j<=i;j++) { if(a[j]>=m&&t==1)//判断是否有系统可以发射 { if(a[j]<a[ma])//如果现在找到的系统高度比上一个高度低,ma刷新 ma=j; } if(a[j]>=m&&t==0)//找到第一个可以发射的系统 { t=1,ma=j; } } if(ma==-1)//没有可以发射的系统 { i++; a[i]=m;//增加一个系统 } else { a[ma]=m; } } printf("%d\n",i+1); } return 0; }