#include <bits/stdc++.h> using namespace std; int n, t[41], lw, lk, wyn[41][2]; bitset <41> b[41], c, v; void f(int x) { if(x>n) { if(wyn[lw][0]==lk) { ++wyn[lw][1]; } else if(wyn[lw][0]>lk) { wyn[lw][0]=lk; wyn[lw][1]=1; } return; } f(x+1); c=v&b[x]; int lz=c.count(); ++lw; lk+=lz; v[x]=1; f(x+1); --lw; lk-=lz; v[x]=0; } int main() { scanf("%d", &n); for(int i=1; i<=n; ++i) { scanf("%d", &t[i]); } for(int i=1; i<=n; ++i) { for(int j=i+1; j<=n; ++j) { if(t[j]<t[i]) { b[i][j]=true; b[j][i]=true; } } } for(int i=1; i<=n; ++i) { wyn[i][0]=(1<<20); } f(1); for(int i=1; i<=n; ++i) { printf("%d %d\n", wyn[i][0], wyn[i][1]); } return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | #include <bits/stdc++.h> using namespace std; int n, t[41], lw, lk, wyn[41][2]; bitset <41> b[41], c, v; void f(int x) { if(x>n) { if(wyn[lw][0]==lk) { ++wyn[lw][1]; } else if(wyn[lw][0]>lk) { wyn[lw][0]=lk; wyn[lw][1]=1; } return; } f(x+1); c=v&b[x]; int lz=c.count(); ++lw; lk+=lz; v[x]=1; f(x+1); --lw; lk-=lz; v[x]=0; } int main() { scanf("%d", &n); for(int i=1; i<=n; ++i) { scanf("%d", &t[i]); } for(int i=1; i<=n; ++i) { for(int j=i+1; j<=n; ++j) { if(t[j]<t[i]) { b[i][j]=true; b[j][i]=true; } } } for(int i=1; i<=n; ++i) { wyn[i][0]=(1<<20); } f(1); for(int i=1; i<=n; ++i) { printf("%d %d\n", wyn[i][0], wyn[i][1]); } return 0; } |