HDU 1257 最少拦截系统

匿名 (未验证) 提交于 2019-12-03 00:22:01

解题思路:刚开始没读懂题,还以为直接排序了事,后来发现不能用排序。仔细读题之后发现题目样例是这个意思: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; }

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!