华为机试 HJ103题解 | #Redraiment的走法#
Redraiment的走法
https://www.nowcoder.com/practice/24e6243b9f0446b081b1d6d32f2aa3aa
#include <iostream> #include <vector> #include <algorithm> #include <bits/stdc++.h> using namespace std; // 动态规划法求解严格递增子序列的长度,同力扣300.最长递增子序列 int LengthOfLIS(vector<int> &nums) { // 定义:dp[i]为以nums[i]这个数为结尾的最长严格递增子序列的长度 if (nums.size() == 0) { return 0; } // base case: dp 数组全都初始化为1 vector<int> dp(nums.size(), 1); for (int i = 0; i < nums.size(); i++) { for (int j = 0; j < i; j++) { // 状态转移方程 if (nums[j] < nums[i]) { dp[i] = std::max(dp[i], dp[j] + 1); } } } int maxLen = 0; for (int i = 0; i < dp.size(); i++) { maxLen = std::max(maxLen, dp[i]); } return maxLen; } int main() { int n; vector<int> nums; while (cin >> n) { // 注意 while 处理多个 case for (int i = 0; i < n; i++) { int num; cin >> num; nums.push_back(num); } std::cout << LengthOfLIS(nums) << std::endl; } return 0; } // 64 位输出请用 printf("%lld")