拼多多掷骰子的期望,非DP的解法

if __name__ == "__main__":
    n = int(input().strip())
    data = list(map(int, input().strip().split(" ")))

    from functools import reduce
    all = reduce(lambda x,y:x * y, data) # 计算列表元素乘积

    data = sorted(data, reverse = True) #data 递减排序
    
    temp_dict = {} #保存最大值的情况数目

    while 0 not in data: # 当data中元素均不为0的时候
        max_d = data[0]  # 最大值为第一个
        temp = reduce(lambda x,y:x * y, data[1:])
        if max_d in temp_dict:
            temp_dict[max_d] = temp_dict[max_d] + temp # 判断key是否在字典中,在的话结果相加
        else:
            temp_dict.update({max_d:temp}) #否则添加结果
        data[0] = data[0]-1 #最大值减一
        data = sorted(data, reverse = True) # 对data重新排序
    
    res = 0
    for k,v in temp_dict.items():
        res = res + k*v/all  #计算概率
    
    print ('%.2f' %(res))

#作者:SunYanCN
#链接:https://juejin.im/post/5d6b950f518825391623e75a
#来源:掘金
#著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

#拼多多##笔试题目#
全部评论

相关推荐

评论
点赞
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务