您的位置:首页 > 其它

HDU 1257 最少拦截系统

2015-08-28 17:32 309 查看

原题链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1257

题目大意:

《中文题》

思路:

这个问题中DP数组有些特别。它存放的是之前出现过的最小值。

每一次输入后。将其与DP中存放的值做比较。如果找到比输入的值更大的DP[i]的值。就修改。否则系统+1。

代码如下:

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

int Min[30001];

int main()
{
int N;
while( ~scanf("%d",&N) )
{
int num,n,a,j;
num = 0;
Min[num] = 0;
for( n = 0; n < N; n++ )
{
scanf("%d",&a);
for( j = 0; j < num; j++ )
//表示之前的系统可以拦截。修改那套系统的最小值
if( a <= Min[j] )
{
Min[j] = a;
break;
}
//之前的系统已经不可以拦截了。需要一套新系统。
if( j == num  )
{
Min[num] = a;
num++;
}

}
printf("%d\n",num);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  dp