2011-12-17 07:29:24
地址:http://acm.hdu.edu.cn/showproblem.php?pid=1257
题意:中文。最少拦截系统。
mark:经典dp。最少拦截系统数=最长非降子序列(LIS)数。O(n^2)水过。
代码:
# include <stdio.h>
int a[1010] ;
int dp[1010] ;
int n ;
int max(int a, int b){return a>b?a:b;}
int lis()
{
int i, j, ans = 0 ;
dp[0] = 1 ;
for (i = 1 ;i < n ; i++)
{
dp[i] = 1 ;
for(j = 0 ; j < i ; j++)
{
if (a[j] > a[i]) continue ;
dp[i] = max(dp[i], dp[j]+1) ;
}
if (dp[i] > ans) ans = dp[i] ;
}
return ans ;
}
int main ()
{
int i ;
while (~scanf ("%d", &n))
{
for (i = 0 ; i < n ; i++)
scanf ("%d", &a[i]) ;
printf ("%d\n", lis()) ;
}
return 0 ;
}