HDU 1257 最少拦截系统

  
    
/*
若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 ;
}

你可能感兴趣的:(HDU)