提交时间:2023-11-18 10:42:51

运行 ID: 111129

#include<bits/stdc++.h> using namespace std; int n,a[1005],out[1005],now=0,check[5005][1005],now2=0; bool visited[1005],f; bool checkq() { bool t=0; for(int i=1;i<=now2;i++) { for(int j=0;j<=now;j++) { if(a[out[j]]!=check[i][j]) { t=1; } } if(t==0) { return true; } t=0; } return false; } void search(int x) { if((now>=2)&&(checkq()==false)) { if(f==0) { f=1; } else { printf("\n"); } now2++; for(int i=0;i<now;i++) { check[now2][i]=a[out[i]]; printf("%d ",a[out[i]]); } } for(int i=x+1;i<=n;i++) { if((a[i]>=a[x])&&(visited[i]!=true)) { out[now++]=i; visited[i]=true; search(i); visited[i]=false; now--; } } } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } a[0]=-10005; search(0); return 0; }