掷骰子
来源:互联网 发布:java中for循环 编辑:程序博客网 时间:2024/05/16 11:40
掷骰子
时间限制:3000 ms | 内存限制:65535 KB
难度:4
- 描述
- 小明有m个骰子,小红有n个骰子。每一个骰子都是标准六面骰子。他们分别掷出自己的骰子,如果小明的点数和大,则小明胜;否则小红胜。求小明胜利的概率。
- 输入
- 有T组数据。每组数据一行,m和n,用空格隔开。1 <= m, n <= 10
- 输出
- 对于每一组数据,输出小明获胜的概率。每组输出占一行,用四舍五入法,精确到小数点后面6位。
- 样例输入
11 1
- 样例输出
0.416667
思路:
筛子的加深, 遍历所有dp结果用公式求结果打表。
//公式:ans[i][j] = sum(dp[i][m]+dp[j][n])/(6^i * 6^j)[m > n].#include <stdio.h>#include <math.h>int dp[11][61];double ans[11][11];int getans(){ int i, j, k, l; double sum; for(i = 1; i < 7; i++) { dp[1][i] = 1; } for(i = 2; i < 11; i++) //此处求dp和筛子一样(递推) { for(j = i; j <= i*6 && j <= 60; j++) { for(k = 1; k <= 6; k++) { if(j-k > 0) { dp[i][j] += dp[i-1][j-k]; } } } } for(i = 1; i < 11; i++) { for(j = 1; j < 11; j++) { sum = 0.0; for(k = 60; k >= 1; k--) //编译所有可能数, 用公式求解ans[i][j]放结果 { for(l = 1; l < k; l++) { sum += (dp[i][k] * 1.0 * dp[j][l]); } } ans[i][j] = sum / (pow(6.0, i*1.0)*pow(6.0, j*1.0)); } } return 0;}int main(){ int n, m, t; getans(); scanf("%d", &t); while(t--) { scanf("%d%d", &n, &m); printf("%.6lf\n", ans[n][m]); } return 0;}
0 0
- 掷骰子
- 掷骰子
- 掷骰子
- 掷骰子
- 掷骰子
- 掷骰子
- 上帝掷骰子吗
- 掷骰子问题
- UVA 657 掷骰子
- 扑克牌和掷骰子
- 掷骰子游戏
- nyoj 掷骰子
- 掷骰子问题
- 掷骰子游戏
- 掷骰子游戏
- 上帝是否掷骰子?
- 掷骰子 (Dice)
- jzoj3072 掷骰子
- 如何用python最快的获取大文件的最后几行
- 电商应用再设计的九条经验
- [ACM] hdu 1166 敌兵布阵(树状数组)
- gradle android友盟多渠道混淆编译打包
- ACMjava无根树转有根数,构建表达式
- 掷骰子
- Test for Job (动态规划 + 拓扑排序)
- linux内核部件分析之——设备驱动模型之class
- COM专题三---生成和注册代理根服务器(Building and Registering a Proxy DLL)
- C++反汇编->函数调用原理
- k个盘子放n个苹果
- 使用debmirror为Debian建立本地源的方法,以及遇到的GPG key验证错误问题的解决方法
- 设备驱动模型之device-driver
- maven实战(2)-- m2eclipse插件配置