问题标题: 酷町堂:2804 导 弹拦截

0
0
已解决
武奕楷
武奕楷
新手天翼
新手天翼

https://ke.codingtang.com/#/problem/problemSub?id=2804

题目描述 Description

某国为了防御敌国的**袭击,发展出一种**拦截**。但是这种**拦截**有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的**来袭。由于该**还在试用阶段,所以只有一套**,因此有可能不能拦截所有的**。

输入**依次飞来的高度(雷达给出的高度数据是 0<=h<=50000 的正整数),计算这套**最多能拦截多少**,如果要拦截所有**最少要配备多少套这种**拦截**。

输入描述 Input Description

1 行,若干个整数(个数 ≤100000 )

输出描述 Output Description

2 行,每行一个整数,第一个数字表示这套**最多能拦截多少**,第二个数字表示如果要拦截所有**最少要配备多少套这种**拦截**。

样例输入 Sample Input

389 207 155 300 299 170 158 65

样例输出 Sample Output

6 2

#include<iostream>
#include<cstdio>
using namespace std;
int a[50001],b[50001],h[50001],n,i=1,maxn,m;
int main(){
	while(cin>>a[i]){
		int maxn=0;
		for(int j=1;j<i;j++){
			if(a[j]>=a[i]){
				if(b[j]>maxn){
					maxn=b[j];
				}
			}
		}
		b[i]=maxn+1;m=max(b[i],m);
		int x=0;
		for(int k=1;k<=n;k++){
			if(h[k]>=a[i]){
				if(x==0) x=k;
				else if(h[k]<h[x]) x=k;
			}
		}
		if(x==0){
			n++;
			x=n;
		}
		h[x]=a[i];
		i++;
	}
	cout<<m<<endl<<n;
	return 0;
}

超时,请问该怎么改

武奕楷在2021-10-24 16:39:37追加了内容

更改题目,以防**

武奕楷在2021-10-24 16:39:43追加了内容

更改题目,以防**

武奕楷在2021-10-26 16:43:25追加了内容

看看我的新头像

武奕楷在2021-10-29 20:42:09追加了内容

@李显晨 

 

@王子耀 

 

 

@汪恺恒 

 

@汪宇航

 

@汪宇航  

 

 

 

 

武奕楷在2022-11-10 20:15:29追加了内容

来个人吧,我把他给结掉,我已经做对了(都一年前的帖子了)


0
0
0
我要回答