完美世界笔试题-递增子序列B-最长递增子序列打印
Posted 木叶∞
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了完美世界笔试题-递增子序列B-最长递增子序列打印相关的知识,希望对你有一定的参考价值。
#include<iostream> #include<memory.h> #include<stack> using namespace std; const int maxn = 3005; int A[maxn],d[maxn],fron[maxn]; int f(int i) { for(int j = 0; j < i; j ++) { if(A[j] < A[i]) { if(d[j] + 1 > d[i]) { d[i] = d[j] + 1; fron[i] = j; } } } return d[i]; } int main() { int t; cin >> t; int n; while(t --) { cin >> n; memset(A, 0, sizeof(A)); for(int i = 0; i < n; i ++) { cin >> A[i]; d[i] = 1; fron[i] = i; } int ans = -1, ansid = 0; for(int i = 0; i < n; i ++) { if(f(i) > ans) { ans = f(i); ansid = i; } } stack<int> st; while(fron[ansid] != ansid) { st.push(A[ansid]); ansid = fron[ansid]; } st.push(A[ansid]); bool flag = false; while(!st.empty()) { if(flag)cout << ‘ ‘; flag = true; cout << st.top(); st.pop(); } cout << endl; } }
已过。
以上是关于完美世界笔试题-递增子序列B-最长递增子序列打印的主要内容,如果未能解决你的问题,请参考以下文章