LIS (逆向)輸出路徑(n * n版) 結合SDNUOJ1292(新手看過來)
阿新 • • 發佈:2018-12-22
#include <cstdio> #include <cmath> #include <algorithm> #include <cstring> #include <iostream> #define N 25 using namespace std; struct xulie { int s, pre, dp = 1; } ans[N]; int main() { int k = 0; int a; while(cin >> a) { ans[k].s = a; k++; // char b = getchar(); // if(b == '\n' ) // break; } cout << k << '\n'; int maxx = 1, pos; for(int i = 1; i < k; ++i) { for(int j = 0; j < i; ++j) { if(ans[i].s > ans[j].s && ans[j].dp + 1 > ans[i].dp) { ans[i].dp = ans[j].dp + 1; ans[i].pre = j; cout << i << " " << ans[i].pre << '\n'; if(maxx < ans[i].dp) { maxx = ans[i].dp; cout << "序列加長" << '\n'; cout << "當前最長為" << " " << maxx << '\n'; pos = i; } } } } // cout << pos << ans[pos].s << '\n'; // pos = ans[pos].pre; // cout << pos << ans[pos].s << '\n'; // pos = ans[pos].pre; // cout << pos << ans[pos].s << '\n'; // pos = ans[pos].pre; // cout << pos << ans[pos].s << '\n'; // pos = ans[pos].pre; // cout << pos << ans[pos].s << '\n'; // pos = ans[pos].pre; // cout << pos << ans[pos].s << '\n'; for(int i = 0; i < maxx; ++i) { cout << ans[pos].s << " "; pos = ans[pos].pre; } return 0; }