HDU 1257 最少拦截系统(①动态规划--最长子序列 ②暴力+贪心 模拟)

本文探讨了HDU 1257题目的两种解法,一是结合暴力搜索与贪心策略的模拟方法,二是将问题转换为最长不降子序列的动态规划问题。解法一中,通过比较导弹与现有拦截系统高度差进行选择或新建系统;解法二利用动态规划的子问题特性,寻找最长子序列。强调解题关键在于理解题意并灵活运用算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接(点击打开链接

解法一:直接(暴力+贪心)模拟:对于每一个飞过来的导弹,遍历所有已有的系统的当前的值,找出一个最合适(即系统目前高度与导弹高度相差最小,PS:贪心思想)的系统。若是没找到合适的系统,说明此时导弹已经高于所有系统的目前高度 ,那么就重新设立一座新的系统 。若是找到了最合适的系统的话,就用该导弹的高度更新所找的系统的目前值。

代码如下:

#include<bits/stdc++.h>
using namespace std;
#define N 1000

int n;										//导弹的个数 
int daodan[N];								//存储各个导弹的高度	
int xitong[N];								//存储各个系统目前的高度(即最低高度) 

int main(){
	while(cin >> n){
		for(int i = 0;i < n;++i){		   //读入各个导弹的高度 
			cin >> daodan[i];
		}
		xitong[0] = daodan[0];			   //对于第一颗导弹,构建第一座系统 
		int len = 1;					   //记录已构建的系统个数,由于第一个系统已经构建好了,所以初始化为1 
		int minindex = 0;				   //记录对于
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值