HDU 1257 最少拦截系统(贪心)
2016-02-12 13:17
399 查看
最少拦截系统
[align=left]Problem Description[/align]某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹.
怎么办呢?多搞几套系统呗!你说说倒蛮容易,成本呢?成本是个大问题啊.所以俺就到这里来求救了,请帮助计算一下最少需要多少套拦截系统.
[align=left]Input[/align]
输入若干组数据.每组数据包括:导弹总个数(正整数),导弹依此飞来的高度(雷达给出的高度数据是不大于30000的正整数,用空格分隔)
[align=left]Output[/align]
对应每组数据输出拦截所有导弹最少要配备多少套这种导弹拦截系统.
[align=left]Sample Input[/align]
8 389 207 155 300 299 170 158 65
[align=left]Sample Output[/align]
2
[align=left]Answer[/align]
做这个题目为自己的智商感到捉急,一开始想不就是找出最大的高度就好了嘛,答案就是1啊,然后发现例子是2,才想到导弹是依次过来的...之后改,读取一个就和上一次的比,如果上一次的比较低,那就新开一个系统,然而WA...最后发现这样做的问题是,用完了一个系统,即使下次导弹可以拦截也不用这个系统拦截,也就是浪费了。所以正确思路是开一个数组,保存所有系统的最低高度,读取一个导弹对比一次,如果都不能拦截,再新开系统。
#include <cstdio> #include <iostream> #include <string> #include <sstream> #include <cstring> #include <stack> #include <queue> #include <algorithm> #include <cmath> #include <map> #define PI acos(-1.0) #define ms(a) memset(a,0,sizeof(a)) #define msp memset(mp,0,sizeof(mp)) #define msv memset(vis,0,sizeof(vis)) using namespace std; //#define LOCAL int main() { #ifdef LOCAL freopen("in.txt", "r", stdin); #endif // LOCAL ios::sync_with_stdio(false); int n,t; vector<int> sys; while(cin>>n) { sys.clear(); while(n--) { cin>>t; for(int i=0,vs=sys.size();i<=vs;i++) { if(i==vs){sys.push_back(t);break;} if(sys[i]>=t){sys[i]=t;break;} } } int ans=sys.size(); printf("%d\n",ans); } return 0; }
View Code
相关文章推荐
- JavaScript学习过程
- JSTL与EL
- 学田岛电脑绣花制版新人上手教程之二
- iOS-AutoLayout布局学习
- 203. Remove Linked List Elements LeetCode
- bzoj2938病毒
- HDU 1069 Monkey and Banana 基础DP
- 轻松解决MYSQL数据库连接过多的错误
- 38. Count and Say LeetCode
- Mac Finder中如何复制当前完整路径
- 图片的拉伸
- 个人学习-java-面向对象
- VS2013学会使用spy++
- Ajax跨域问题
- Tag功能介绍—我们为什么打Tag?
- 编程计算斐波那契数列: F(n)= {a,n=1/b,n=2/f(n-1)+f(n-2),n>2&n为奇/ f(n-1)+f(n-2)+f(n-3),n>2&n为偶
- usaco 1.3.6 skidesign
- ANDROID_MARS学习笔记_S01_012_RatingBar
- EXCEL数据导入数据库表
- ANDROID_MARS学习笔记_S01_012_SeekBar