LIS 导弹系统 ,贪心

 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹.
怎么办呢?多搞几套系统呗!你说说倒蛮容易,成本呢?成本是个大问题啊.所以俺就到这里来求救了,请帮助计算一下最少需要多少套拦截系统.

Input
输入若干组数据.每组数据包括:导弹总个数(正整数),导弹依此飞来的高度(雷达给出的高度数据是不大于30000的正整数,用空格分隔)
Output
对应每组数据输出拦截所有导弹最少要配备多少套这种导弹拦截系统.
Sample Input

8 389 207 155 300 299 170 158 65

Sample Output

2

解题报告:这道题挺坑的,n的范围也没说,同时有些数据很恶心,比如:再给一组坑爹的样例吧:

8

7,6,5,6,3,2,4,1

答案是3吗?恭喜你WA!其实对于这组数据,只要两套就够了

第一套拦截系统:7,6,5

第二套拦截系统:6,3,2

这是毫无疑问的,对于剩下的两个数据,继续用第一套系统就可以了?不是吗?

理解题目后就可以贪心了,

保存下所有导弹系统能用的高度。

#include<iostream>
#include<algorithm>
using namespace std;
const	int N=300010;
int a[N];
int dp[N];
int main()
{
   
	int n;
	while(cin>>n)
	{
   
	cin>>a[0];
	int cnt=1;
	for(int i=1;i<n;i++)
	{
   
		int x;
		bool flag=false;
		cin>>x;
		for(int j=0;j<cnt;j++)
		if(a[j]>x)
		{
   
			a[j]=x;
			flag=true;
			break;
		}
		if(!flag)
		{
   
			a[cnt++]=x;
			
		}
		
	}
	cout<<cnt<<endl;	
	
		}
	return 0;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
06-27 14:11
很喜欢小米的新车,校招薪资每月22k,攒多久能买?
测试糕手手:别看工资,先看现金流存款。有50W存款以上再考虑,车是消耗品,选适合自己的重要。你有钱就当我没说过
点赞 评论 收藏
分享
牛客83700679...:简历抄别人的,然后再投,有反馈就是简历不行,没反馈就是学历不行,多投多改只要技术不差机会总会有的
点赞 评论 收藏
分享
头顶尖尖的程序员:我也是面了三四次才放平心态的。准备好自我介绍,不一定要背熟,可以记事本写下来读。全程控制语速,所有问题都先思考几秒,不要急着答,不要打断面试官说话。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务