hdu1257

这道题目我是先用贪心a了的,但是最近在做dp,所以用dp思考了下,果断错了。

dp思路:是一道最长非递减子序列,但是,在新增一道拦截系统的情况下,前面已经存在的拦截系统依旧可以使用.......

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
int a[10000];
int main()
{
    int n;
    while(scanf("%d",&n)>0)
    {
        int dp[10000]={3000};
        int i;
        for(i=1;i<=n;i++)
            scanf("%d",&a[i]);
        i=1;
        int k=1;
        while(k<=n)
        {
            for(int j=1;j<=i;j++)
            {
                if(dp[j]>=a[k])
                {
                    dp[j]=a[k];
                    break;
                }
            }
            if(j>i)
            {
                dp[++i]=a[k];
            }
            k++;
        }
        printf("%d\n",i-1);
    }
    return 0;
}

 

posted @ 2013-04-11 21:01  紫忆  阅读(359)  评论(0)    收藏  举报