博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SRM 626 D1L1: FixedDiceGameDiv1,贝叶斯公式,dp
阅读量:6074 次
发布时间:2019-06-20

本文共 1348 字,大约阅读时间需要 4 分钟。

题目:

用到了概率论中的,而中须要用到的概率须要用dp方法求解。

代码:

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define CHECKTIME() printf("%.2lf\n", (double)clock() / CLOCKS_PER_SEC)typedef pair
pii;typedef long long llong;typedef pair
pll;#define mkp make_pair/*************** Program Begin **********************/const int MAX_SCORE = 50 * 50;class FixedDiceGameDiv1 {public: double dp1[MAX_SCORE + 1], dp2[MAX_SCORE + 1]; // dp[i]: roll a b-sieded dice 最后总得分为i的概率 void calc(int a, int b, double dp[]) { for (int i = 0; i < MAX_SCORE + 1; i++) { dp[i] = 0.0; } dp[0] = 1.0; for (int i = 0; i < a; i++) { for (int j = a * b; j >= 0; j--) { if (dp[j] == 0) { continue; } for (int k = 1; k <= b; k++) { dp[j + k] += dp[j] / b; } dp[j] = 0; } } } double getExpectation(int a, int b, int c, int d) { double res = 0.0; calc(a, b, dp1); calc(c, d, dp2); // 贝叶斯公式 double up = 0, down = 0; for (int i = a; i <= a * b; i++) { for (int j = 0; j < i; j++) { up += dp1[i] * dp2[j] * i; down += dp1[i] * dp2[j]; } } if (down == 0) { return -1; } res = up / down; return res; }};/************** Program End ************************/

转载地址:http://aoxgx.baihongyu.com/

你可能感兴趣的文章
Problem G
查看>>
前端图片优化方案
查看>>
python迭代、列表生成式
查看>>
matlab-可视化图像阈值选择GUI工具
查看>>
python-Input and Output--已阅
查看>>
BUG处理流程图
查看>>
关于VIM的几点设置
查看>>
将博客搬至CSDN
查看>>
Homestead 安装 phpMyAdmin 作为数据库管理客户端 — Laravel 实战 iBrand API 教程
查看>>
Unity C# 设计模式(六)原型模式
查看>>
002、这个提示太难看
查看>>
Linux--sed使用
查看>>
.net的session详解
查看>>
没有显示器的情况下安装和使用树莓派
查看>>
ling查询
查看>>
android 项目学习随笔四(优化ViewPager)
查看>>
20151211jquery ajax进阶代码备份
查看>>
web系统架构
查看>>
MYSQL数据库进阶操作
查看>>
mysql 安装以及卸载 CentOS 6.9
查看>>