您的位置:首页 > 其它

hdu 1257 最少拦截系统(简单dp+贪心)

2017-05-13 18:20 471 查看
题目链接:点击打开链接

思路:每次读取一个数据,判断是否能接到之前的拦截系统上,若是不能,就新开一个拦截系统,如果能的话,要接到那个能满足的且当前高度最小的拦截系统上(贪心思想),因为要尽可能的使当前的拦截系统的高度保住,以后才能拦截更多的导弹。

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <iostream>
using namespace std;
int dp[100000];
int main(){
int n,x;
int flag,temp,index,top;
while(scanf("%d",&n)!=EOF){
top=-1;
for(int i=1;i<=n;i++){
scanf("%d",&x);
flag=0;temp=0x3f3f3f3f;
for(int j=0;j<=top;j++){
if(x<=dp[j]){
flag=1;
if(dp[j]<temp){
temp=dp[j];
index=j;
}
}
}
if(!flag) dp[++top]=x;
else dp[index]=x;
}
printf("%d\n",top+1);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: