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 ...
随机推荐
- jquery文档
http://jquery.cuishifeng.cn/selected_1.html
- SQL Server Connection Pooling (ADO.NET)
SQL Server Connection Pooling (ADO.NET) Connecting to a database server typically consists of severa ...
- vue配置二级目录&vue-axios跨域办法&谷歌浏览器设置跨域
一.根据官方建议,dist打包的项目文件放在服务器根目录下,但是很多时候,我们并不能这样做,当涉及到二级目录设置多层深埋的时候,就需要在webpack配置文件里去设置一下了. 在webpack.con ...
- 【BZOJ】4311: 向量(线段树分治板子题)
题解 我们可以根据点积的定义,垂直于原点到给定点构成的直线作一条直线,从正无穷往下平移,第一个碰到的点就是答案 像什么,上凸壳哇 可是--动态维护上凸壳? 我们可以离线,计算每个点能造成贡献的一个询问 ...
- python的types模块
python的types模块 1.types是什么: types模块中包含python中各种常见的数据类型,如IntType(整型),FloatType(浮点型)等等. >>> im ...
- BNUOJ 52509 Borrow Classroom
最近公共祖先. 如果$A$到$1$的时间小于$B$到$C$再到$1$的时间,那么一定可以拦截. 如果上述时间相等,需要在到达$1$之前,两者相遇才可以拦截. #include<bits/stdc ...
- Python数据类型-列表(list)增删改查
1.添加元素 添加单个元素:使用append(object)函数可以为列表添加单个元素,参数object为对象:也就是说所有Python的对象都可以添加到列表中. 添加多个元素(合并列表):使用ext ...
- 将 Unity5.3 的老项目升级到 Unity 2018.3 遇到的些许问题。
删除 ParticleEmmiter 等废弃的接口: 删除 WindowsSecurityContext System.Security.Principal.WindowsIdentity 在 .Ne ...
- Scrapy爬取女神照片
使用Scrapy趴一趴美女图 Scrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自 ...
- nyoj 311 dp 完全背包
完全背包 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 直接说题意,完全背包定义有N种物品和一个容量为V的背包,每种物品都有无限件可用.第i种物品的体积是c,价值是w. ...