简介
动态规划问题。
对于贪心无法解决的问题, 要第一时间想到动态规划问题的解法。
但是对于动态规划问题, 你要想的是使用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;
}
}
---------------------------我的天空里没有太阳,总是黑夜,但并不暗,因为有东西代替了太阳。虽然没有太阳那么明亮,但对我来说已经足够。凭借着这份光,我便能把黑夜当成白天。我从来就没有太阳,所以不怕失去。
--------《白夜行》