HDU3076 ssworld VS DDD
嘟嘟嘟
友情提示:数据把\(hp1\)和\(hp2\)弄反了!
进入正题。
这题还是比较好想,令\(dp[i][j]\)表示第一个人赢了\(i\)场,第二个人赢了\(j\)的概率,转移就是分别考虑这一场谁赢了。
所以我们要预处理两个人赢的概率。显然有\(winA = \sum _ {i = 1} ^ 6 \sum _ {j = 1} ^ {i - 1} p1[i] * p2[j]\),\(winB = \sum _ {i = 1} ^ 6 \sum _ {j = i + 1} ^ {n} p1[i] * p2[j]\)。但这两种概率加起来并不是1,因为还得考虑平的概率,即\(equal = \sum_ {i = 1} ^ {n} p1[i] * p2[i]\)。所以\(winA' = \frac{winA}{1 - equal}\),\(winB' = \frac{winB}{1 - equal}\)。
(实际上\(equal\)就是\(1 - winA - winB\),把上面的式子加起来就得证了)
注意的是边界条件。一是\(dp[m][i]\)不能从\(dp[m][i - 1]\)转移过来,因为第二个人已经死了。二是每一次循环\(j\)的范围是\([0, n - 1]\),原因和第一条同理。
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<cctype>
#include<vector>
#include<stack>
#include<queue>
#include<assert.h>
using namespace std;
#define enter puts("")
#define space putchar(' ')
#define Mem(a, x) memset(a, x, sizeof(a))
#define In inline
typedef long long ll;
typedef double db;
const int INF = 0x3f3f3f3f;
const db eps = 1e-8;
const int maxn = 2e3 + 5;
In ll read()
{
ll ans = 0;
char ch = getchar(), last = ' ';
while(!isdigit(ch)) last = ch, ch = getchar();
while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar();
if(last == '-') ans = -ans;
return ans;
}
In void write(ll x)
{
if(x < 0) x = -x, putchar('-');
if(x >= 10) write(x / 10);
putchar(x % 10 + '0');
}
In void MYFILE()
{
#ifndef mrclr
freopen(".in", "r", stdin);
freopen(".out", "w", stdout);
#endif
}
int n, m;
db p1[maxn], p2[maxn], dp[maxn][maxn];
int main()
{
//MYFILE();
while(scanf("%d%d", &m, &n) != EOF)
{
for(int i = 1; i <= 6; ++i) scanf("%lf", &p1[i]);
for(int i = 1; i <= 6; ++i) scanf("%lf", &p2[i]);
db winA = 0, winB = 0, eqa = 0;
for(int i = 1; i <= 6; ++i)
for(int j = 1; j <= 6; ++j)
{
if(i > j) winA += p1[i] * p2[j];
if(i < j) winB += p1[i] * p2[j];
if(i == j) eqa += p1[i] * p2[j];
}
winA /= (1 - eqa);
winB /= (1 - eqa);
dp[0][0] = 1;
for(int i = 0; i < m; ++i)
for(int j = 0; j < n; ++j)
{
if(!i && !j) continue;
dp[i][j] = 0;
if(i > 0) dp[i][j] += dp[i - 1][j] * winA;
if(j > 0) dp[i][j] += dp[i][j - 1] * winB;
}
db ans = 0;
for(int i = 0; i < n; ++i) ans += dp[m - 1][i] * winA;
printf("%.6lf\n", ans);
}
return 0;
}
HDU3076 ssworld VS DDD的更多相关文章
- HDU 3076:ssworld VS DDD(概率DP)
http://acm.split.hdu.edu.cn/showproblem.php?pid=3076 ssworld VS DDD Problem Description One day, s ...
- HDU 3076 ssworld VS DDD 概率dp,无穷级数,oj错误题目 难度:2
http://acm.hdu.edu.cn/showproblem.php?pid=3076 不可思议的题目,总之血量越少胜率越高,所以读取时把两人的血量交换一下 明显每一轮的胜率和负率都是固定的,所 ...
- hdu 3076 ssworld VS DDD (概率dp)
///题意: /// A,B掷骰子,对于每一次点数大者胜,平为和,A先胜了m次A赢,B先胜了n次B赢. ///p1表示a赢,p2表示b赢,p=1-p1-p2表示平局 ///a赢得概率 比一次p1 两次 ...
- hdu3076--ssworld VS DDD(概率dp第三弹,求概率)
ssworld VS DDD Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
- hdu3076ssworld VS DDD 概率dp
//ssworld VS DDD 两个人有血量值 hp1 , hp2 //两人掷骰子得到每一点的概率已知 //ssword赢的概率 //dp[i][j] 表示有第一个人血量为i.第二个人的血量为j ...
- 如何一步一步用DDD设计一个电商网站(九)—— 小心陷入值对象持久化的坑
阅读目录 前言 场景1的思考 场景2的思考 避坑方式 实践 结语 一.前言 在上一篇中(如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成),有一行注释的代码: public interfa ...
- 如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成
阅读目录 前言 建模 实现 结语 一.前言 前面几篇已经实现了一个基本的购买+售价计算的过程,这次再让售价丰满一些,增加一个会员价的概念.会员价在现在的主流电商中,是一个不大常见的模式,其带来的问题是 ...
- 如何一步一步用DDD设计一个电商网站(十)—— 一个完整的购物车
阅读目录 前言 回顾 梳理 实现 结语 一.前言 之前的文章中已经涉及到了购买商品加入购物车,购物车内购物项的金额计算等功能.本篇准备把剩下的购物车的基本概念一次处理完. 二.回顾 在动手之前我对之 ...
- 如何一步一步用DDD设计一个电商网站(一)—— 先理解核心概念
一.前言 DDD(领域驱动设计)的一些介绍网上资料很多,这里就不继续描述了.自己使用领域驱动设计摸滚打爬也有2年多的时间,出于对知识的总结和分享,也是对自我理解的一个公开检验,介于博客园这个平 ...
随机推荐
- 【规律】Farey Sums
[参考博客]: https://blog.csdn.net/meopass/article/details/82952087 Farey Sums 题目描述 Given a positive inte ...
- CTS & APIO 2019 游记
写在前面 算是省选后的第一轮大考. 去年因为某些原因并没有参加 CTSC 以及 APIO,还是有些遗憾,所以希望今年能有所收获. 也希望今年的 CTS 能延续去年的出题风格,这样我还能苟一两个题. 然 ...
- Centos7安装gitlab11 学习笔记之备份恢复及邮箱配置
一.备份 修改配置文件 vim /etc/gitlab/gitlab.rb 默认路径为 # gitlab_rails['backup_path'] = "/var/opt/gitlab/ba ...
- pandas简介
- VUE CLI3 less 全局变量引用
方法一 1.添加依赖 style-resources-loader 2.vue.config.js中添加 module.exports = { pluginOptions: { 'style-reso ...
- 基于vue的购物车清单
<!doctype html> <html> <head> <meta charset="utf-8"> <link rel= ...
- CVE-2019-0213: Apache Archiva Stored XSS
CVE-2019-0213: Apache Archiva Stored XSS Severity: Low Vendor:The Apache Software Foundation Version ...
- Python学习记录8-继承2
继承 单继承和多继承 单继承:每个类只能继承一个类 多继承:每个类允许继承多个类 >>> class A(): pass >>> class B(A): pass ...
- 如何解决Win10不能新建项目的问题?
在Win10系统中,我们有时候会遇到右键菜单中没有新建项的情况,这时我们就无法进行文件的新建,非常耽误我们使用电脑.下面雨后清风就来分享一下Win10系统右键菜单没有新建项的解决方法. Win10系统 ...
- TightVNC安装
软件版本:tightvnc-2.8.8-gpl-setup-64bit.msi 后面一路默认,虚拟机端口默认从5900开始递增.