提交时间:2023-12-04 18:15:37

运行 ID: 113948

#include<bits/stdc++.h> using namespace std; int n,a[10000]; stack<int>s; map<stack<int>,bool>mp; bool check(int t) { for(int i=t+1;i<=n;i++) if(a[i]>=a[t]) return false; return true; } void dfs(int t) { if(s.size()>=2&&!mp[s]) { stack<int>st=s; int *ans=new int[s.size()]; while(!st.empty()) { ans[st.size()]=st.top(); st.pop(); } for(int i=1;i<=s.size();i++) cout<<ans[i]<<(i==s.size()?"\n\n":" "); mp[s]=true; delete[] ans; } if(check(t)) return; for(int i=t+1;i<=n;i++) { if(a[i]>=a[t]) { s.push(a[i]); dfs(i); s.pop(); } } } int main() { cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; dfs(0); return 0; }