您的位置:首页 > 其它

淘汰赛制

2015-10-17 16:26 369 查看

【问题描述】

淘汰赛制是一种极其残酷的比赛制度。2n名选手分别标号1,2,3,……2n-1,2n,他们将要参加n轮的激烈角逐。每一轮中,将所有参加该轮的选手按标号从小到大排序后,第1位与第2位比赛,第3位与第4位比赛,第5位与第6位比赛……只有每场比赛的胜者才有机会参加下一轮的比赛(不会有平局)。这样,每轮将淘汰一半的选手。n轮过后,只剩下一名选手,该选手即为最终的冠军。 现在已知每位选手分别与其他选手比赛获胜的概率,请你预测一下谁夺冠的概率最大。

【输入文件】

输入文件elimination.in。第一行是一个整数n(1<=n<=10),表示总轮数。接下来2n行,每行2n个整数,第i行第j个是pij(0<=pij<=100,pii=0,pij+pji=100),表示第i号选手与第j号选手比赛获胜的概率。 【输出文件】

【样例输入】

2

0 90 50 50

10 0 10 10

50 90 0 50

50 90 50 0

【样例输出】

1

【数据规模】 30%的数据满足n<=3 100%的数据满足n<=10

分析

这道题看着貌似很经典的样子》》》。。。

可DP,可分治。。下面主要说一下分治。

首先要明确该概率的算法:

f[i,j]表示第j位选手通过第i轮的概率,

> f[i,j]=f[i-1,j] * sum{f[i-1,k] * p[j,k]}

(i=1..n , j=1..2^n,k为所有可能在第i轮与第j位选手交战的选手编号)。。。其实这是DP的方程

时间复杂度O(n^2*2^n)。

下面结合代码讲解具体的分治。

因为每场都是相邻的人进行比赛,所以保证了此算法的正确性,以人数为区间进行分治

每一场比赛都是人数减少一半,也就是分治时的二分区间长度

对于每个人在每轮比赛中所有可能遇到的对手:



由上面这个图可知对于每一场比赛中的、每一个人的所有可能对手,是在此场比赛时、把人数区间二分后的、另一半区间内所有人(即此人不在的另一半区间)

代码+注释

var p:array[1..1024,1..1024]of extended;
f:array[0..10,1..1024]of extended;
ans,n,nn,i,j:longint;

procedure dfs(s,t,k:longint);
var i,j,m:longint;
begin
if k=0 then exit;     //将区间不断二分,k为第k轮比赛
m:=(s+t) shr 1;
dfs(s,m,k-1);
dfs(m+1,t,k-1);
for i:=s to m do        // 根据方程算概率
for j:=m+1 to t do
begin
f[k,i]:=f[k,i]+f[k-1,i]*f[k-1,j]*p[i,j];
//对于第i个人,此场比赛中所有可能对手就是另一半区间(m+1,t)内所有人
f[k,j]:=f[k,j]+f[k-1,j]*f[k-1,i]*p[j,i];
//对于第j个人,此场比赛中所有可能对手就是另一半区间(s,m)内所有人
end;
end;

begin

readln(nn);   //nn为总轮数,n为总人数
n:=1 shl nn;
for i:=1 to n do
for j:=1 to n do
begin
read(p[i,j]);
p[i,j]:=p[i,j]/100;
end;
for i:=1 to n do f[0,i]:=1; //不要忘记赋初值
dfs(1,n,nn);
ans:=1;
for i:=2 to n do
if f[nn,i]>f[nn,ans] then ans:=i;
write(ans);
end.

评测结果 Result
测试点 #1:通过该测试点。 得分10,耗时0ms,内存3141kB。
测试点 #2:通过该测试点。 得分10,耗时0ms,内存3125kB。
测试点 #3:通过该测试点。 得分10,耗时0ms,内存3162kB。
测试点 #4:通过该测试点。 得分10,耗时0ms,内存3198kB。
测试点 #5:通过该测试点。 得分10,耗时0ms,内存3284kB。
测试点 #6:通过该测试点。 得分10,耗时31ms,内存3411kB。
测试点 #7:通过该测试点。 得分10,耗时15ms,内存3690kB。
测试点 #8:通过该测试点。 得分10,耗时15ms,内存4763kB。
测试点 #9:通过该测试点。 得分10,耗时46ms,内存7409kB。
测试点 #10:通过该测试点。 得分10,耗时187ms,内存13746kB。




立冬。

小雪。

大雪。

冬至。

小寒。

大寒。

在无法遇见第二个寂寞的人的寂寞冬天——

独自行走、独自唱歌、独自逛街、独自看着

一整个世界狂欢。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  分治