FACUP - The FA cup
Tác giả: skyvn97
Ngôn ngữ: C++
#include<algorithm>
#include<cstdio>
#define MAX 575
#define FOR(i,a,b) for (int i=(a);i<=(b);i=i+1)
#define REP(i,n) for (int i=0;i<(n);i=i+1)
using namespace std;
double p[MAX][MAX];
double f[MAX][MAX];
int ans[MAX];
const double eps=1e-9;
int n;
bool cmp(const int &i,const int &j) {
if (f[i][n]>f[j][n]) return (true);
if (f[j][n]>f[i][n]) return (false);
return (i<j);
}
void init(void) {
int t;
scanf("%d",&n);
REP(i,1<<n) REP(j,1<<n) {
scanf("%d",&t);
p[i][j]=1.0*t/100;
}
}
void optimize(void) {
REP(i,1<<n) f[i][0]=1.0;
FOR(j,1,n) REP(i,1<<n) {
int num=i/(1<<(j-1));
if (num%2==0) num++; else num--;
REP(k,1<<(j-1)) {
int t=num*(1<<(j-1))+k;
f[i][j]+=f[i][j-1]*f[t][j-1]*p[i][t];
}
}
}
void print(void) {
REP(i,1<<n) ans[i]=i;
sort(ans,ans+(1<<n),cmp);
REP(i,1<<n) printf("%d\n",ans[i]+1);
}
int main(void) {
init();
optimize();
print();
return 0;
}