现在的位置: 首页 > 综合 > 正文

HDU 1257 最少拦截系统 DP

2012年09月19日 ⁄ 综合 ⁄ 共 564字 ⁄ 字号 评论关闭

这题是一DP题,开始我听小白的直接暴力,结果测试数据能过,但提交就wa,我哭啊,呜~~~~,我重敲了一次,结果还是悲剧,几个小时啊,我就在这悲剧,最后翻出小晨的代码,发现好简单的,百度上说是最长上升子序列,于是直接1A了,最长上升子序列就是在一个数列a1-an中,从中选取几个数,这个数组成的序列递增,并且是a1到an中这样子序列中最长那一个。这个题其实也符合最长上升子序列,只要后面有一个比前面高的,就要加一个拦截系统(要增加一个拦截系统,首先要知道前面已经有多少涛拦截系统)。//这个能A

#include<stdio.h>
int n,dis[100000],max,dp[100000];
void DP( )
{
     
           for( int i = 1; i <= n; ++i )
           {
                dp[i] = 1;
                for( int j = 1; j < i; ++j )
                     if( dis[i] > dis[j] && dp[j] + 1 > dp[i] )
                         dp[i] = dp[j] + 1;
                if( dp[i] > dp[max]  )
                    max = i;
            }     
 }     
int main( )
{
    int t;
    while( scanf( "%d",&n ) != EOF )
    {
           max = 0;
           dis[0] = dp[0] = 0;
           for( int i = 1; i <= n; ++i )
                scanf( "%d",&dis[i] );
           DP(); 
            printf( "%d\n",dp[max] );
           }
    return 0;
}

抱歉!评论已关闭.