#include <bits/stdc++.h> using namespace std; #pragma GCC optimization ("unroll-loops") #pragma GCC optimize("Ofast") const int MAXN=27; const int inf=1e9+2137; int dp[(1<<MAXN)]; int v[MAXN]; int pos[MAXN]; int res[MAXN]; int main() { ios_base::sync_with_stdio(false); cin.tie(0); int n,p,m,b; cin>>n; for(int i=0;i<n;i++) cin>>v[i],res[i+1]=inf; for(int i=1;i<(1<<n);i++) { p=-1; for(int j=0;j<n;j++) { if(i&(1<<j)) { if(p==-1) p=j; else if(v[j]<v[p]) dp[i]++; } } dp[i]+=dp[i^(1<<p)]; b=__builtin_popcount(i); if(dp[i]<res[b]) res[b]=dp[i],pos[b]=0; if(dp[i]==res[b]) pos[b]++; } for(int i=1;i<=n;i++) cout<<res[i]<<' '<<pos[i]<<'\n'; }
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 | #include <bits/stdc++.h> using namespace std; #pragma GCC optimization ("unroll-loops") #pragma GCC optimize("Ofast") const int MAXN=27; const int inf=1e9+2137; int dp[(1<<MAXN)]; int v[MAXN]; int pos[MAXN]; int res[MAXN]; int main() { ios_base::sync_with_stdio(false); cin.tie(0); int n,p,m,b; cin>>n; for(int i=0;i<n;i++) cin>>v[i],res[i+1]=inf; for(int i=1;i<(1<<n);i++) { p=-1; for(int j=0;j<n;j++) { if(i&(1<<j)) { if(p==-1) p=j; else if(v[j]<v[p]) dp[i]++; } } dp[i]+=dp[i^(1<<p)]; b=__builtin_popcount(i); if(dp[i]<res[b]) res[b]=dp[i],pos[b]=0; if(dp[i]==res[b]) pos[b]++; } for(int i=1;i<=n;i++) cout<<res[i]<<' '<<pos[i]<<'\n'; } |