您的位置:首页 > 其它

HDU 1257 最少拦截系统(动态规划)

2015-08-12 16:04 330 查看
题目链接:Click here

思路:保存下每一个拦截系统目前可以拦截的最大高度,每输入一个高度,就与之比较,如果某个最大拦截高度大于输入的高度,将之替换;如果找不到,就新建一个拦截系统。

这个代码感觉不是特别严谨,想了半天就是想不出哪个数据可以卡住,但是感觉肯定有,求大神指点。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
#include <cstdlib>

using namespace std;

int main()
{
int n, a, ans, j;
int dp[30005];
while(scanf("%d", &n) != EOF)
{
ans = 0;
for(int i = 0; i < n; i++)
{
scanf("%d", &a);
for(j = 0; j <= ans; j++)
{//循环比较,找出可以拦截的系统并替换其最大拦截高度
if(a <= dp[j])
{
dp[j] = a;
break;
}
}
if(j > ans)
{//如果找不到的话,就新建一个拦截系统,最大高度就为刚输入的高度
ans++;
dp[ans] = a;
}
}
printf("%d\n", ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: