NOIP模拟 赌博游戏 - 概率dp
2024-08-31 19:46:27
题意:
最近西雅图的高中校园里流行这样一个游戏。
我们有一个骰子,这个骰子有M个面,分别写着1..M,并且是个公平的骰子,换句话说,一次投掷时每个面朝上的概率是相同的。
游戏的组织者使用这个骰子进行N次投掷,并且告诉玩家点数v出现了至少一次。那么玩家需要猜测N次投掷的点数之和。如果猜对了,就赢得了这个游戏。
小宇也喜欢玩这个游戏。在一次游戏中,她猜测了一个正整数sum,于是她想知道猜对的概率是多少。
分析:
设f[i][j][0/1]表示猜了i次,和为j,有(1)没有(0)猜中过v的概率。
转移很简单:
\(f[i][j][k == v] += f[i - 1][j - k][0]\)
\(f[i][j][1] += f[i - 1][j - k][1]\)
最后答案为: \(\frac{f[n][sum][1]}{\sum{f[n][j][1]}}\)
code
#include<bits/stdc++.h>
using namespace std;
int n, m, sum, v;
double tot, f[60][2600][2];
int main(){
freopen("h.in", "r", stdin);
scanf("%d%d%d%d", &n, &m, &v, &sum);
f[0][0][0] = 1;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n * m; j++){
for(int k = 1; k <= m; k++){
f[i][j][k == v] += 1.0*f[i - 1][j - k][0] / (1.0*m);
f[i][j][1] += 1.0*f[i - 1][j - k][1] / (1.0*m);
}
}
}
for(int i = 1; i <= n * m; i++) tot += f[n][i][1];
printf("%.8f", f[n][sum][1] / tot);
return 0;
}
最新文章
- Vim 快速上手
- 使用pyinstaller打包Python应用,生成EXE执行文件
- SystemErrorCodes
- PBOC金融IC卡,卡片与终端交互的13个步骤,简介-第三组
- 三种Singleton的实现方式
- JS浮点数的加减乘除运算
- codeforces 485B Valuable Resources 解题报告
- 【jmeter】属性和变量
- vs2010 开发过程中调试时 有错误不中断
- Remark of BLENDFUNCTION from MSDN
- linux上ln命令详细说明
- ios 以NSObject为父类的各类间继承关系
- Gulp browserify livereload
- StreamReader 读取文本文件乱码问题
- [算法] dijkstra单源无负权最小路径算法
- Vue.js高仿饿了么WebApp
- React,Node.js,Vue,Webkit技术内幕
- 『高次同余方程 Baby Step Giant Step算法』
- Metasploit Framework(2)Exploit模块、Payload使用
- python中的各种锁
热门文章
- action中json的应用
- SQL server 2012 安装SQL2012出现报错: 启用 Windows 功能 NetFx3 时出错
- Incapsula免费日本CDN加速和CDNZZ香港CDN节点加速
- 课程与教学管理系统(CMS):Sakai
- Android网络框架OkHttp之get请求(源码初识)
- Android通过startService播放背景音乐简单演示样例
- js进阶 13-11/12 jquery如何实现折叠导航
- 接口如何使用(以笑话大全api为例)
- (转)c运行库、c标准库、windows API的区别和联系
- 最新GitHub新手使用教程(Windows Git从安装到使用)——详细图解