题目链接
最长递增子序列也是动态规划的其中一种,
他的动态规划体现在想找到递增子序列,必须去更新每个数的状态,
举例:
arr[] 1 4 3 2 5 6
dp[] 1 2 2 2 3 4
由上面可以得出规律:
每个数都与前面的所有数进行比较,
如果前面的数大于当前这个数,就转移那个数的状态到当前的数,然后加一。
比较取最大值即可。
最后再遍历一遍看哪个值最大,就是最长递增子序列。
#include <bits/stdc++.h>
using namespace std;
int n, arr[1005], dp[1005];
int main() {cin >> n;for (int i = 1; i <= n; i++) {cin >> arr[i];}for (int i = 1; i <= n; i++) {dp[i] = 1;//初始化为1for (int j = 1; j < i; j++) {if (arr[i] > arr[j]) {dp[i] = max(dp[j] + 1, dp[i]);}}}int maxnum = dp[1];for (int i = 2; i <= n; i++) {maxnum = max(dp[i], maxnum);}cout << maxnum<<endl;return 0;
}
这里是红糖,记录我的小白成长史。
如果觉得对你有帮助的话可以点个赞,点个关注,创作不易,请多多支持。
我们下篇文章见!!