ZOJ 3380 Patchouli's Spell Cards 概率DP
2015-10-10 15:59
423 查看
题意:给你m个位置,每个位置放一个数,区间为1~n,问你至少有L个位置是一样的数的概率,结果用分数表示
思路:这题我们从反向入手,dp[i][j]代表前i个数,放到j个位置,且没有L个或以上的位置有相同的组合情况,最后用n^m减去即可
这道题要用大数,正好这两天在乱搞python。。。也算是自己用python过的第一道题~
思路:这题我们从反向入手,dp[i][j]代表前i个数,放到j个位置,且没有L个或以上的位置有相同的组合情况,最后用n^m减去即可
这道题要用大数,正好这两天在乱搞python。。。也算是自己用python过的第一道题~
import sys C = [([0] * 110) for i in range(110)] for i in range(101): C[i][0] = C[i][i] = 1 for j in range(1, i): C[i][j] = C[i-1][j] + C[i-1][j-1] def GCD(a, b): return a if not b else GCD(b, a % b) while True: try: m, n, l = map(int, sys.stdin.readline().split()) if(l > m): print('mukyu~') continue dp = [([0] * 110) for i in range(110)] dp[0][0] = 1 for i in range(1, n+1): for j in range(1, m+1): for k in range(0, min(j+1, l)): dp[i][j] += dp[i-1][j-k] * C[m-(j-k)][k] Sum = pow(n, m) ans = 0 for i in range(1, n+1): ans += dp[i][m] ans = Sum - ans; gcd = GCD(ans, Sum) print str(ans / gcd) + '/' + str(Sum / gcd) except: break
相关文章推荐
- 例10-5 uva12716
- HTTPS概述
- 九度OJ 1177 查找 (模拟)
- 实验一、DOS命令解释程序的编写
- 从上往下打印二叉树
- java中的堆和栈
- HDU 4035 Maze
- Android开发是sqlite数据库使用adb shell在cmd下查看
- 自定义注解理解梳理
- Nginx+Keepalived实现
- 我的Android进阶之旅------>Android中查看应用签名信息
- JSON字符串解析(得到属性的值)
- Unity3d中Shader的基本属性以及定义
- 海量数据前N大
- windows下tomcat+solr+ZooKeeper集群搭建
- 安卓 Fragment显示和隐藏 与 onResume
- OC之非正式协议总结
- Android 自定义布局dialog使用(解决edittext无法弹出输入法的问题)
- Android进程级别与如何防止服务进程被回收
- 编程大牛推荐书籍