您的位置:首页 > 其它

hdu1257 最少拦截系统

2012-11-19 17:54 225 查看
AC的第一道dp(最长上升子序列)

这个题看上去有点棘手,不过仔细分析一下就会发现:每一个导弹最终的结果都是要被打的,如果他后面有一个比它高的导弹,那打它

的这个装置无论如何也不能打那个导弹了,经过这么一分析,这个问题就呗抽象成了求最长上升子序列的问题啦。。。

#include <stdio.h>

#include <string.h>

#define MAXN 10000

int a[MAXN], opt[MAXN];

int T, n, i, j, ans;

int main ( ) {

while ( scanf ( "%d", &T ) != EOF ) {

memset ( opt, 0, sizeof ( opt ) );

for ( i = 1; i <= T; ++i )

scanf ( "%d", &a[i] );

a[0] = -30005;

for ( i = 1; i <= T; ++i )

for ( j = i - 1; j >= 0; --j )

if ( a[j] < a[i] && opt[j] + 1 > opt[i] ) opt[i] = opt[j] + 1;

ans = 0;

for ( i = 1; i <= T; ++i )

if ( opt[i] > ans ) ans = opt[i];

printf ( "%d\n", ans );

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: