简介
动态规划问题。
对于贪心无法解决的问题, 要第一时间想到动态规划问题的解法。
但是对于动态规划问题, 你要想的是使用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;
}
}