zoukankan      html  css  js  c++  java
  • HDU-1257.最少拦截系统(基础DP)

      本题大意:给出n和n个整数,让你求出其中不上升子序列的个数。

      本题思路:用dp[ i ]保存第i个防御系统攻击的最低的导弹,遍历数组,遇到更低的导弹则更新最小值,否则新加一个系统用来防御,并且更新最小值。

      参考代码:

    #include <iostream>
    using namespace std;
    
    const int maxn = 1e5 + 5;
    int n, ans;
    int a[maxn], dp[maxn];
    bool flag;
    
    int main () {
        while(cin >> n) {
            ans = 1;
            for(int i = 0; i < n; i ++)
                cin >> a[i];
            dp[1] = a[0];//用dp[i]表示第i个下降子序列的最小元素
            for(int i = 1; i < n; i ++) {
                flag = false;
                for(int j = 1; j <= ans; j ++)
                    if(a[i] <= dp[j]) {
                        dp[j] = a[i]; 
                        flag = true;
                        break;    
                    }
                if(!flag) dp[++ ans] = a[i];
            }
            cout << ans << endl;
        }
        return 0;
    }
  • 相关阅读:
    Uva10305(dfs)
    Uva572
    Uva122
    Uva679
    Uva136
    Uva489
    Uva133
    Uva1339
    Uva1588
    《世纪的哭泣》读后感 读书笔记
  • 原文地址:https://www.cnblogs.com/bianjunting/p/10584732.html
Copyright © 2011-2022 走看看