码迷,mamicode.com
首页 > 其他好文 > 详细

题解报告:hdu 1257 最少拦截系统

时间:2018-03-04 21:49:03      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:php   一个   解题思路   i++   ems   using   end   ble   现在   

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1257

解题思路:题目的关键句是“第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.”这句话的意思就是给你一组数据,从头到尾选出需要拦截系统的高度(较小值),做法是依次保存现在每个拦截系统能拦截的最高的高度,接下来输入的每一个高度,依次和这若干拦截系统的现在所能拦截的最高高度进行比较,若某次小于这个高度,就替代这个高度,(并直接退出当前循环);若比这些拦截系统的高度都高,就重新创造一个拦截系统。


测试数据:8 7 6 5 6 3 2 4 1
答案:2(0 2 4)

AC代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int a,b[100000];//a为导弹的高度,b数组来保存拦截系统能够拦截的高度
 4 int main()
 5 {
 6     int n,cnt,j;
 7     while(cin>>n){
 8         memset(b,0,sizeof(b));//b用来保存拦截系统能够拦截的最大高度
 9         cnt=0;//计算拦截系统的个数
10         for(int i=0;i<n;i++){
11             cin>>a;
12             for(j=0;j<=cnt;j++)//每次都用较小的高度来替换b中的数值
13                 if(b[j]>=a){b[j]=a;break;}//如果拦截系统能够拦截就拦截
14             if(j>cnt)b[++cnt]=a;//如果拦截系统都不能够拦截,就只能够再重新用一个拦截系统了
15         }
16         cout<<cnt<<endl;
17     }
18     return 0;
19 }

 

题解报告:hdu 1257 最少拦截系统

标签:php   一个   解题思路   i++   ems   using   end   ble   现在   

原文地址:https://www.cnblogs.com/acgoto/p/8506260.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!