导弹拦截失败了。。。 NOIP1999-S-1-拦截导弹 WA40

我的代码

#include<bits/stdc++.h>
using namespace std;
const int N=100005;
const int INF=0x3f3f3f3f;
int a[N],dp[N],vis[N];//vis[i]第i导弹是否已选择 
int h;
int main(){
	int cnt=0,ans=0,maxn=INT_MIN,n=0;
	while(cin>>h) a[n++]=h;
	for(int i=1;i<=n;i++) { 
		dp[i]=1;//dp[i]以i为结尾的最长不上升子序列的长度 
		for(int j=1;j<=i-1;j++)
			if(a[i]<=a[j]) dp[i]=max(dp[i],dp[j]+1); //不能高于即为<=
		maxn=max(maxn,dp[i]);
	}
	cout<<maxn<<endl;
    while(cnt<n) {
        h=INF;//可拦截的高度
        for(int i=1;i<=n;i++){
            if(vis[i]==0&&h>a[i]){
                h=a[i];//可拦截高度降低
                //cout<<h<<" ";
                vis[i]=1;
                cnt++;//cnt记得加上不然会TLE(第一次就死在这
            }
        }
        ans++; 
        //cout<<h<<" ";
        //cout<<cnt<<" "<<endl;
    }
    cout<<ans<<endl;
	return 0;
}
/*
389 207 155 300 299 170 158 65

6
2
*/

大佬萌帮我看看

@言过 你这一道dp题目你后面是在干什么?

1 个赞

o看错题目了,等一下

1 个赞

@言过 不是大哥,你输入是以0开始的为什么后面是从1开始的?

1 个赞

我不到咋改啊

@言过 你的代码输入是 n++ 但是这样会先执行操作后高边大小应改成 ++n 这样是先改变大小后操作

1 个赞

哦,我懂了

90…

输入
554 345 75 178 51 64 28 18 51 51 542 17
目标输出
7
3
实际输出
7
4

@言过 你的后面贪心的按段条件不对应该是 >= 不是 >

1 个赞

为什么

1 个赞

@言过 e等一下好像有问题,我想想

1 个赞

是>=a[i]

1 个赞

AC了

1 个赞

为什么啊

@言过 o没问题,因为题目说后面发射的高度不能比第一次高也就是<=

1 个赞

因为他说的是不大于,等于也算不大于

1 个赞

谢谢啦

解决应该给 @王钰宸涵