POJ Monthly--2006.12.31, flymouse King of Fighters

【题目描述】

两个大牛玩拳皇,N v N的比赛,总共M个角色,给出牛A的N个角色对阵牛C的M个角色时赢的概率,求牛C N场比赛全胜的最大概率

【输入输出】

多case

n <= 10 m <= 100000

p11 p12 p13 .... p1m

...

pn1 pn2 pn3 .... pnm

EOF结束

每个用例输出最大概率。

【题目分析】

其实就是说从一个N×M的矩阵里每一行选一个数,这些数不能在同一列,使得它们的乘积最大

鉴于M太大,先减小下规模

对于牛A的每个角色,牛C肯定会从M个角色里挑选N个胜算最大的角色中的一个,所以最后M个角色里最多挑出N × N个角色,里面肯定有使概率最大的N个不同的角色,这下办法就多了,可以直接集合DP,O(N * N * N * 2 ^ N ) <= 1024000,或者使用KM算法,亦或是费用流,因为是求乘积的,用后两种方法的时候可以先log10一下,最后答案再pow(10)一下,题目给出的矩阵是牛A胜牛C的,记得用1减之。我用个第一种方法,代码比较简单

【code】

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值