解题思路:刚开始没读懂题,还以为直接排序了事,后来发现不能用排序。仔细读题之后发现题目样例是这个意思:8(导弹个数) 389 207 155(第一个系统)300 299 170 158 65(第二个系统),因为300>155,所以需要第二个系统。要注意已经设置的系统也可以用来拦截导弹,故而每一次都从头开始判断导弹高度是否小于系统可拦截高度。
ps:wa了几次,在discuss中借鉴了两组测试数据,分享一下。
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int high[1010]; int stay[1010]; int main() { int n; while(~scanf("%d",&n)) { int j=0; for(int i=0;i<n;i++) { scanf("%d",&high[i]); if(i==0) stay[j]=high[i]; else { int sign=0; for(int k=0;k<=j;k++) { if(stay[k]>=high[i]) { sign=1; stay[k]=high[i]; break; } } if(!sign) { ++j; stay[j]=high[i]; } } } printf("%d\n",j+1); } return 0; }
文章来源: HDU 1257 最少拦截系统