poj3071

【题意】

给出2^n个球队之间互相的胜率,求哪个球队胜率最高。

比赛以淘汰赛形式进行。

【输入】

多组数据,第一行一个整数n,意义如上

接下来一个2^n*2^n的矩阵,表示球队之间的胜率

【输出】

对于每组数据,输出胜率最高的球队的编号,相同的时候输出编号小的


模拟一下,算出每轮每个球队的胜率即可


program poj3071;
var
  n,i,j,k,o:longint;
  p:array [0..129,0..129] of double;
  f:array [0..8,0..129] of double;
begin
  repeat
    read(n);
    if n=-1 then break;
    for i:=1 to 1 shl n do
      for j:=1 to 1 shl n do
        read(p[i][j]);
    fillchar(f,sizeof(f),0);
    for i:=1 to 1 shl n do
      f[0,i]:=1;
    for i:=1 to n do
      for j:=1 to 1 shl n do
        begin
          o:=(j-1) div (1 shl (i-1));
          if o and 1 = 0 then inc(o)
                         else dec(o);
          for k:=o*(1 shl (i-1))+1 to (o+1)*(1 shl (i-1)) do
            f[i,j]:=f[i,j]+p[j,k]*f[i-1,j]*f[i-1,k];
        end;
    k:=1;
    for i:=1 to 1 shl n do
      if f[n,i]>f[n,k] then k:=i;
    writeln(k);
  until false;
end.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值