贪心算法——1322:【例6.4】拦截导弹问题(Noip1999)

在这里插入图片描述
思路:
之前的导航系统依然有效。
增加一个数组t,用于记录导航系统数量,将第一个数添加到数组t
如果可以拦截,找t数组上大于且最接近的值进行替换;
如果无法拦截,则增加导航系统,将值添加到数组t末尾。

 #include<iostream>
 using namespace std;

 int main(){
    int n[1001],t[1001],i=0,k=0;
    while(cin>>n[i]){
    	i++;
	}
	t[0]=n[0];	//将第一个数存到t数组 
	for(int j=1;j<i;j++){	//从第二个开始比较 
		bool f=1;	
		int wz;			//用于记录位置 
		int max=40000;
		for(int l=0;l<=k;l++){	找比n[j]大,且大小最接近的一个数  
			if(t[l]>=n[j]&&t[l]<max){  
				f=0;
				wz=l;
				max=t[l];
			}
		}
		if(f){		//如果不存在比n[j]更大的数 
			k++;
			t[k]=n[j];	//t数组添加一个数 
		}
		else{		//如果存在比n[j]更大的数 
			t[wz]=n[j]; //替换t数组上的值 
		}
	}
	cout<<k+1;  
    return 0;
 }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值