tyvj 2002 扑克牌
期望DP
本题递推比较麻烦,可以记忆化搜索
注意搜索的边界条件
以及每一次转移
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
using namespace std;
double dp[16][16][16][16][6][6];
bool f[16][16][16][16][6][6];
int term[4];
double dfs(int a, int b, int c, int d, int p, int q) {
if(f[a][b][c][d][p][q]) return dp[a][b][c][d][p][q];
f[a][b][c][d][p][q] = 1;
double & ans = dp[a][b][c][d][p][q];ans = 0.0;
int r1 = a, r2 = b, r3 = c, r4 = d;
if(p == 1) r1++; if(p == 2) r2++; if(p == 3) r3++; if(p == 4) r4++;
if(q == 1) r1++; if(q == 2) r2++; if(q == 3) r3++; if(q == 4) r4++;
if(r1 >= term[0] && r2 >= term[1] && r3 >= term[2] && r4 >= term[3]) return ans = 0;
int sum = 54 - r1 - r2 - r3 - r4;
if(sum <= 0) return ans = 1e10;
if(a < 13) ans += dfs(a + 1, b, c, d, p, q) * (13 - a) /sum;
if(b < 13) ans += dfs(a, b + 1, c, d, p, q) * (13 - b) /sum;
if(c < 13) ans += dfs(a, b, c + 1, d, p, q) * (13 - c) /sum;
if(d < 13) ans += dfs(a, b, c, d + 1, p, q) * (13 - d) /sum;
if(!p) {
double tmp = dfs(a, b, c, d, 1, q);
tmp = min(tmp, dfs(a, b, c, d, 2, q));
tmp = min(tmp, dfs(a, b, c, d, 3, q));
tmp = min(tmp, dfs(a, b, c, d, 4, q));
ans += tmp / sum;
}
if(!q) {
double tmp = dfs(a, b, c, d, p, 1);
tmp = min(tmp, dfs(a, b, c, d, p, 2));
tmp = min(tmp, dfs(a, b, c, d, p, 3));
tmp = min(tmp, dfs(a, b, c, d, p, 4));
ans += tmp / sum;
}
ans += 1.0;//概率和是 1 ,所以我们直接加 1 即可
return ans;
}
int main() {
for(int i = 0; i < 4; i++) cin >> term[i];
double ans = dfs(0, 0, 0, 0, 0, 0);
if(ans >= 100.0) printf("-1.000\n");
else printf("%.3f\n", ans);
return 0;
}
tyvj 2002 扑克牌的更多相关文章
- TYVJ 2002 扑克牌 题解
P2002 扑克牌 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 Admin生日那天,Rainbow来找Admin玩扑克牌……玩着玩着Rainbow觉得太没 ...
- TYVJ P2002 扑克牌
背景 Admin生日那天,Rainbow来找Admin玩扑克牌……玩着玩着Rainbow觉得太没意思了,于是决定给Admin一个考验~~~ 描述 Rainbow把一副扑克牌(54张)随机洗开,倒扣着放 ...
- SCNU 2015ACM新生赛初赛【1007. ZLM的扑克牌】解题报告
题目链接详见SCNU 2015新生网络赛 1007. ZLM的扑克牌 . 其实我在想这题的时候,还想过要不要设置求最小的排列,并且对于回文数字的话,可以把扑克牌折起来( ...
- BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊
2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 9071 Solved: 4652[Submi ...
- [BZOJ3223]Tyvj 1729 文艺平衡树
[BZOJ3223]Tyvj 1729 文艺平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区 ...
- [BZOJ3224]Tyvj 1728 普通平衡树
[BZOJ3224]Tyvj 1728 普通平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个) ...
- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
有时候,当我们使用"mysql"."mysqladmin"."mysqldump"等命令管理数据库时,服务器抛出类似如下错误: 一.错误现场 ...
- Java 用LinkdeList实现52张扑克牌
用LinkdeList实现52张扑克牌(不含大小王)的洗牌功能.提示:花色 ,和数字分别用数组存储. import java.util.LinkedList; import java.util.Ran ...
- C算法编程题(一)扑克牌发牌
前言 上周写<我的编程开始(C)>这篇文章的时候,说过有时间的话会写些算法编程的题目,可能是这两天周末过的太舒适了,忘记写了.下班了,还没回去,闲来无事就写下吧. 因为写C++的编程题和其 ...
随机推荐
- java基础—java制作证书的工具keytool
一.keytool的概念 keytool 是个密钥和证书管理工具.它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数字签名)自我认证(用户向别的用户/服务认证自己)或数据完整性以及认证服务.在 ...
- MySQL使用INSERT插入多条记录
MySQL使用INSERT插入多条记录,应该如何操作呢?下面就为您详细介绍MySQL使用INSERT插入多条记录的实现方法,供您参考. 看到这个标题也许大家会问,这有什么好说的,调用多次INSERT语 ...
- Maven各种常用架包配置文件,保存一份
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- Spring中使用事务搭建转账环境方法二 相对简便的注解方法 ——配置文件注入对象属性需要setter方法 注解方法,不需要生成setter方法
XML配置文件代码如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...
- 如何用VS2017用C++语言写Hello world 程序?
1,首先,打开VS2017. 2,左上角按文件——新建——项目,或按ctrl+shift+n. 3,按照图片里的选,选完按“确定”. 4,右键“源文件”,再按添加——新建项. 5,剩下的就很简单了,只 ...
- Django项目SECRET_KEY等敏感信息保存
在我们做完django项目后,向生产环境部署时,为了避免一些敏感信息被有心人利用,我们应该将其保护起来,比如说在settings配置中的一些密码等内容存在操作系统内,通过调用来使用,比如下面这种做法: ...
- 初学者之 Git 和 Github
git和github是两个完全不同的概念. git 是一个版本管理工具,是可以在你电脑不联网的情况下,只在本地使用的一个版本管理工具,其作用就是可以让你更好的管理你的程序,比如你原来提交过的内容, ...
- phpExcel使用方法一
include 'PHPExcel.php'; include 'PHPExcel/Writer/Excel2007.php'; //或者include 'PHPExcel/Writer/Excel5 ...
- 20.Yii2.0框架多表关联一对多查询之hasMany
目录 新手模式 hasMany关联模式查询 新建mode层Article.php 新建mode层Category.php 新建控制器HomeController.php 新手模式 用上次的查询结果,作 ...
- Python基础——列表(list)
创建列表(list) 通过[]来创建list结构,里面放任何类型都可以,没有长度限制. list1=[] type(list1) list1=[1,2,3,4] list1 list1=['] lis ...