hdu 1257

我是按照DP 专题刷的,可这道题我应该是暴力过的

神奇之一次AC:
思路:

第一个数肯定需要一个拦截系统,后面的如果是递减下来的数值用这一个就好了,如果数变大,要看一哪个拦截系统还可以拦下,如果都不能拦下,就要加一个拦截系统

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
using namespace std;

int a[10005]={0},h[10005];
int sum=1;
void operate(int x)
{
    for(int i =1;i<=sum;i++)
    {
        if(x<a[i])
        {
            a[i]=x;
            return ;
        }
    }
    sum++;
    a[sum]=x;
    return ;
}

int main()
{
    int N;
    while(cin>>N)
    {
        sum = 0;
        memset(a,0,sizeof(a)); 
        for(int i =1;i<=N;i++)
        {
            cin>>h[i];
        }
        sum = 1;//拦截系统个数 
        a[1]=h[1];//第一个拦截系统的最大高度 
        for(int i = 2;i<=N;i++)
        {
            operate(h[i]);
        }
        cout<<sum<<endl;
    }
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/lyqf/p/9756792.html