因为把返回值误认为dp[N-1]而报错,因为最大值不一定在最后一步。
第一反应就是动态规划,dp[i]指走到第i个桩子时走过的最长递增步数。
每一步只能跟前一步比较决定要不要+1,需要获得走前一步时走过的最大步数,每一步都要遍历寻找之前的最大步数,一次循环无法解决,所以二层。
#include <iostream> #include <vector> using namespace std; int stepN(vector<int> h, int N){ vector<int> dp(N, 1); int res = dp[0]; for(int i = 1; i < N; i ++){ for(int j = 0; j < i; j ++){ if(h[j] < h[i]){ dp[i] = max(dp[i], dp[j] + 1); } } res = dp[i] > res ? dp[i] : res; } return res; } int main() { int N; cin >> N; vector<int> h(N); for(int i = 0; i < N; i++) cin >> h[i]; cout << stepN(h, N); return 0; }