#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; } |
English