POJ 2533 Longest Ordered Subsequence

    xiaoxiao2021-04-15  46

    最长上升子序列问题,dp[i]表示以第i个数结尾的上升子序列长度。

    那么dp[j] = max{dp[i] + 1},只要a[j] > a[i],i < j

    根据dp数组的定义,整个数组都初始化为1

    最后找出dp数组的最大值即可

    代码如下:

    #include<iostream> using namespace std; int a[1010], dp[1010]; int main() { int n; cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; dp[i] = 1; } for (int i = 2; i <= n; i++) { for (int j = 1; j < i; j++) { if (a[j] < a[i] && dp[i] < dp[j] + 1) dp[i] = dp[j] + 1; } } int ans = dp[1]; for (int i = 2; i <= n; i++) if (ans < dp[i]) ans = dp[i]; cout << ans << endl; return 0; }

    转载请注明原文地址: https://ju.6miu.com/read-671301.html

    最新回复(0)