华为机试题 Redraiment

简介

动态规划问题。
对于贪心无法解决的问题, 要第一时间想到动态规划问题的解法。
但是对于动态规划问题, 你要想的是使用dp[] 还是 dp[][]
其中每个dp元素表示的意义
这题的dp[i] 表示的是, 从0开始的桩子到 i 个桩子 , 从小到大最大的序列。
dp[i] = max(dp[i], dp[j] + 1); dp[i] 或者 dp[j] + 1 的最大序列。

code

#include<iostream>
#include <vector>
using namespace std;

int main () {
    int n;
    
    while(cin >> n) {
        vector<int> v(n);
        vector<int> dp(n, 1);
        for(int i=0; i<n; i++){
            cin >> v[i];
        }
        for(int i=0; i<n; i++) {
            for(int j=0; j<i; j++) {
                if(v[i] > v[j]) {
                    dp[i] = max(dp[i], dp[j] + 1);
                }
            }
        }

        int maxNum = 0;
        for(int i=0; i<n; i++) {
            if(dp[i] > maxNum) {
                maxNum = dp[i];
            }
        }
        cout << maxNum << endl;
    }
}
Hope is a good thing,maybe the best of things,and no good thing ever dies.----------- Andy Dufresne
原文地址:https://www.cnblogs.com/eat-too-much/p/14943118.html