记录编号 36674 评测结果 AAAAAAAAAA
题目名称 网球赛 最终得分 100
用户昵称 Gravatarkaaala 是否通过 通过
代码语言 C++ 运行时间 0.391 s
提交时间 2012-03-16 16:09:21 内存使用 12.38 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>

using namespace std;

int N,ans,v[1025][1025];
double p[1025][1025],f[11][1025];

int main()
{
	freopen("elimination.in","r",stdin);
	freopen("elimination.out","w",stdout);
	scanf("%d",&N);
	for(int i=1;i<=1<<N;i++)
		for(int j=1;j<=1<<N;j++)
		{
			int k;
			scanf("%d",&k);
			p[i][j]=k/100.0;
		}
	v[1][1]=1;
	for(int k=0;k<N;k++)
	{
		for(int i=1;i<=1<<k;i++)
			for(int j=1;j<=1<<k;j++)
			{
				v[i+(1<<k)][j]=v[i][j+(1<<k)]=v[i][j]+(1<<k);
				v[i+(1<<k)][j+(1<<k)]=v[i][j];
			}
	}
	for(int i=1;i<=1<<N;i++)
		f[0][i]=1.0;
	int tot=1;
	for(int i=1;i<=N;i++)
	{
		for(int j=1;j<=1<<N;j++)
		{
			for(int k=tot+1;k<=tot<<1;k++)
				f[i][j]+=f[i-1][v[j][k]]*p[j][v[j][k]];
			f[i][j]*=f[i-1][j];
		}
		tot<<=1;
	}
	for(int i=1;i<=1<<N;i++)
		ans=f[N][i]>f[N][ans]?i:ans;
	printf("%d\n",ans);
	return 0;
}