TYVJ 2002 扑克牌 题解
背景
玩着玩着Rainbow觉得太没意思了,于是决定给Admin一个考验~~~
描述
Rainbow想问问Admin,得到A张黑桃、B张红桃、C张梅花、D张方块需要翻开的牌的张数的期望值E是多少?
特殊地,如果翻开的牌是大王或者小王,Admin将会把它作为某种花色的牌放入对应堆中,使得放入之后E的值尽可能小。
由于Admin和Rainbow还在玩扑克,所以这个程序就交给你来写了~
输入格式
输出格式
如果不可能达到输入的状态,输出-1.000。
测试样例1
输入
样例输入1
1 2 3 4样例输入2
15 15 15 15
输出
样例输出1
16.393样例输出2
-1.000
备注
对于100%的数据,0<=A,B,C,D<=15
lydrainbowcat - "Admin生日"杯NOIP模拟赛 第三题
————————————————————我是分割线————————————————————————
好题。
数学期望DP
用记忆化搜索实现。
数组竟然六维,可怕......
#include <cstdio>
#include <cstring>
#include <cmath>
#include<iomanip>
#include <algorithm>
#include <iostream>
using namespace std;
double dp[][][][][][];
bool vis[][][][][][];
int t[];
double dfs(int a,int b,int c,int d,int e,int f)
{
if (vis[a][b][c][d][e][f]) return dp[a][b][c][d][e][f];
if (((a+(e==)+(f==))>=t[])&&((b+(e==)+(f==))>=t[])&&((c+(e==)+(f==))>=t[])&&((d+(e==)+(f==))>=t[])) return dp[a][b][c][d][e][f]=0.0;
int sum=a+b+c+d+(e!=)+(f!=);
double F=;
if (a<) F+=dfs(a+,b,c,d,e,f)*(-a)/(-sum);
if (b<) F+=dfs(a,b+,c,d,e,f)*(-b)/(-sum);
if (c<) F+=dfs(a,b,c+,d,e,f)*(-c)/(-sum);
if (d<) F+=dfs(a,b,c,d+,e,f)*(-d)/(-sum);
double md=; if (e==) {for (int i=;i<;++i) md=min(dfs(a,b,c,d,i,f)/(-sum),md); F+=md;}
md=; if (f==) {for (int i=;i<;++i) md=min(dfs(a,b,c,d,e,i)/(-sum),md); F+=md;}
vis[a][b][c][d][e][f]=true;
return dp[a][b][c][d][e][f]=F;
}
int main()
{
memset(vis,false,sizeof vis);
int a,b,c,d;
scanf("%d%d%d%d",&t[],&t[],&t[],&t[]);
a=t[];b=t[];c=t[];d=t[];
double ans=dfs(,,,,,);
if (ans>54.0) printf("-1.000\n");
else cout<<setiosflags(ios::fixed)<<setprecision()<<ans;
}
tyvj 2002
TYVJ 2002 扑克牌 题解的更多相关文章
- tyvj 2002 扑克牌
期望DP 本题递推比较麻烦,可以记忆化搜索 注意搜索的边界条件 以及每一次转移 #include <iostream> #include <cstdio> #include & ...
- TYVJ P2002 扑克牌
背景 Admin生日那天,Rainbow来找Admin玩扑克牌……玩着玩着Rainbow觉得太没意思了,于是决定给Admin一个考验~~~ 描述 Rainbow把一副扑克牌(54张)随机洗开,倒扣着放 ...
- TYVJ计算几何
今天讲了计算几何,发几道水水的tyvj上的题解... 计算几何好难啊!@Mrs.General....怎么办.... 这几道题都是在省选之前做的,所以前面的Point运算啊,dcmp啊,什么什么的,基 ...
- noip2002提高组题解
再次280滚粗.今天早上有点事情,所以做题的时候一直心不在焉,应该是三天以来状态最差的一次,所以这个分数也还算满意了.状态真的太重要了. 第一题:均分纸牌 贪心.(昨天看BYVoid的noip2001 ...
- 组合数学---P1358 扑克牌
P1358 扑克牌 题解 组合数学 Π c[剩余未选牌数][ai] ( i = 1,2,...,m ) 注意 组合数也要取模,不然数字太大会炸 组合数的具体实现就是Dp啊 代码 #include< ...
- 【POJ 1201 Intervals】
Time Limit: 2000MSMeamory Limit: 65536K Total Submissions: 27949Accepted: 10764 Description You are ...
- POJ1417 True Liars —— 并查集 + DP
题目链接:http://poj.org/problem?id=1417 True Liars Time Limit: 1000MS Memory Limit: 10000K Total Submi ...
- 【51.64%】【POJ 1330】Nearest Common Ancestors
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 26416 Accepted: 13641 Description A roote ...
- usaco 2002 月赛 Fiber Communications 题解
Description Farmer John wants to connect his N (1 <= N <= 1,000) barns (numbered 1..N) with a ...
随机推荐
- IIS 部署nodejs
1.Node.js 2.IIS的URL Rewrite模块 3.iisnode
- awk练习总结
>>> >>>awk是个优秀文本处理工具,可以说是一门程序设计语言.下面是awk内置变量. 一.内置变量表 属性 说明 $0 当前记录(作为单个变量) $1~$n ...
- 动态引入js
function loadScript(url, callback){ var script = document.createElement("script") ...
- .Net使用Redis详解之ServiceStack.Redis
序言 本篇从.Net如何接入Reis开始,直至.Net对Redis的各种操作,为了方便学习与做为文档的查看,我做一遍注释展现,其中会对list的阻塞功能和事务的运用做二个案例,进行记录学习. Redi ...
- CodeForces 805B 3-palindrome
构造. $bbaabbaabbaa......$输出前$n$个即可,这样不需要用到$c$,而且任意相邻三个都不会是回文. #include <cstdio> #include <cm ...
- 自定义寄存器出现error C142: 'SFR': invalid base address
今天打算自定义一个.H文件来写写代码.自定义寄存器的时候发现出现这样的问题7816.H(5): error C142: 'SFR': invalid base address. 下面是我自定义的寄存器 ...
- C# 消除累计误差的倒计时
使用 C# 中自带的各种 timer 计时,都会有累计误差,以下代码实现了一种消除累计误差的方法,使得每次计时的误差,空值在 100 ms 以内(可以通过修改代码提升精度.) 对于精度要求在秒级别的简 ...
- Java常用工具类之时间转换
import java.text.DecimalFormat; import java.text.ParseException; import java.text.SimpleDateFormat; ...
- CodeForces 1063C. Dwarves, Hats and Extrasensory Abilities 交互
题目大意: 依次给定$n$个点的颜色,要求给定这$n$个点的坐标以及一条可以把他们分成两部分的直线 强制在线(交互) $n \leqslant 30$ 感觉自己真像一个乱搞... 我们只考虑把点放在最 ...
- 卡特兰数 codevs 1086 栈
1086 栈 2003年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description ...