最长递增子序列也是动态规划的其中一种,
他的动态规划体现在想找到递增子序列,必须去更新每个数的状态,
举例:
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;
//初始化为1
for (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;
}
这里是红糖,记录我的小白成长史。
如果觉得对你有帮助的话可以点个赞,点个关注,创作不易,请多多支持。
我们下篇文章见!!