【题目描述】
两个大牛玩拳皇,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】