您的位置:首页 > 其它

HDU 1257 最少拦截系统

2011-04-09 02:17 260 查看
/*
若N个数 为递增序列
则最多需要N个导弹系统贪心 + DP 见注释
*/
#include <stdio.h>
#define MAX 100000
int height[MAX];    //height[i]表示第i个防导弹系统所能防御的最大高度
int t;             //t个数
int high;        //height[i]中 最高高度 的 下标
int a[MAX];
int main(){
int i,j;    //j 导弹系统个数
while(scanf("%d",&t)!= EOF){
scanf("%d",&a[0]);
height[0] = a[0];
high = 0;
j = 1;
for(i = 1; i < t; i++){
scanf("%d",&a[i]);
if(a[i] >= height[high]){
height[j++] = a[i];
if(height[j - 1] > height[high]){     //更新high值
high = j - 1;
}
} else {    //贪心选择高度最小的且比能够抵抗住a[i]的导弹
int k,min = 0X7FFFFFFF,min_index;
for(k = 0; k < j; k++){
if(height[k] >= a[i] && min > height[k] - a[i]){
min = height[k] - a[i];
min_index = k;
}
}
height[min_index] = a[i];
}
}
printf("%d\n",j);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: