zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    求a,b在区间上的公倍数个数
    最长非上升子序列的长度
    uva 11992 线段树
    hdu 5464 dp
    hdu 5465 树状数组
    hdu 5459 递推
    poj 2528 动态线段树
    hdu 4474 bfs
    ural 1495 bfs
    hdu 2795 线段树
  • 原文地址:https://www.cnblogs.com/lyqf/p/9756792.html
Copyright © 2011-2022 走看看