TYVJ P2002 扑克牌
背景
玩着玩着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
备注
lydrainbowcat - "Admin生日"杯NOIP模拟赛 第三题
Blog: www.lydrainbowcat.tk Email: lyd@tyvj.cn
决策挺复杂的。
现在不想写解析,日后补。
/*by SilverN*/
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
const int mxn=;
double f[mxn][mxn][mxn][mxn][][];
bool vis[mxn][mxn][mxn][mxn][][];
int x1,x2,x3,x4;
double dp(int a,int b,int c,int d,int e,int g){
if(vis[a][b][c][d][e][g])return f[a][b][c][d][e][g];
int i; if(((a+(e==)+(g==))>=x1) && ((b+(e==)+(g==))>=x2) && ((c+(e==)+(g==))>=x3) && ((d+(e==)+(g==))>=x4))
return f[a][b][c][d][e][g]=;
int sum=a+b+c+d+(e!=)+(g!=);
double tmp=;
//普通
if(a<)tmp+=dp(a+,b,c,d,e,g)*(-a)/(-sum);
if(b<)tmp+=dp(a,b+,c,d,e,g)*(-b)/(-sum);
if(c<)tmp+=dp(a,b,c+,d,e,g)*(-c)/(-sum);
if(d<)tmp+=dp(a,b,c,d+,e,g)*(-d)/(-sum);
//王
double es;
if(e==){
es=;
for(i=;i<=;i++) es=min(dp(a,b,c,d,i,g)/(-sum),es);
tmp+=es;
}
if(g==){
es=;
for(i=;i<=;i++) es=min(dp(a,b,c,d,e,i)/(-sum),es);
tmp+=es;
} vis[a][b][c][d][e][g]=;
return f[a][b][c][d][e][g]=tmp;
}
int main(){
memset(vis,,sizeof(vis));
int a,b,c,d;
scanf("%d%d%d%d",&x1,&x2,&x3,&x4);
double ans=dp(,,,,,);
if(ans>)ans=-;
printf("%.3lf\n",ans);
return ;
}
TYVJ P2002 扑克牌的更多相关文章
- TYVJ 2002 扑克牌 题解
P2002 扑克牌 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 Admin生日那天,Rainbow来找Admin玩扑克牌……玩着玩着Rainbow觉得太没 ...
- tyvj 2002 扑克牌
期望DP 本题递推比较麻烦,可以记忆化搜索 注意搜索的边界条件 以及每一次转移 #include <iostream> #include <cstdio> #include & ...
- SCNU 2015ACM新生赛初赛【1007. ZLM的扑克牌】解题报告
题目链接详见SCNU 2015新生网络赛 1007. ZLM的扑克牌 . 其实我在想这题的时候,还想过要不要设置求最小的排列,并且对于回文数字的话,可以把扑克牌折起来( ...
- [BZOJ3223]Tyvj 1729 文艺平衡树
[BZOJ3223]Tyvj 1729 文艺平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区 ...
- [BZOJ3224]Tyvj 1728 普通平衡树
[BZOJ3224]Tyvj 1728 普通平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个) ...
- Java 用LinkdeList实现52张扑克牌
用LinkdeList实现52张扑克牌(不含大小王)的洗牌功能.提示:花色 ,和数字分别用数组存储. import java.util.LinkedList; import java.util.Ran ...
- C算法编程题(一)扑克牌发牌
前言 上周写<我的编程开始(C)>这篇文章的时候,说过有时间的话会写些算法编程的题目,可能是这两天周末过的太舒适了,忘记写了.下班了,还没回去,闲来无事就写下吧. 因为写C++的编程题和其 ...
- JAVA collection集合之 扑克牌游戏
主要内容:这里使用collection集合,模拟香港电影中大佬们玩的扑克牌游戏. 1.游戏规则:两个玩家每人手中发两张牌,进行比较.比较每个玩家手中牌最大的点数,大小由A-2,点数大者获胜.如果点数相 ...
- BZOJ3223: Tyvj 1729 文艺平衡树 [splay]
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3595 Solved: 2029[Submit][Sta ...
随机推荐
- TestLink学习五:TestLink1.9.13和JIRA6.3.6的集成
testlink和jira的集成,一般步骤: 第1步:System-Issue Tracker Management添加JIRA的db模式.第2步:测试项目管理,“Issue Tracker Inte ...
- 观察器observes与对象初始化
Demo.Person2 = Ember.Object.extend({ init: function() { alert('lljsd'); this.set('salutation', " ...
- 11Spring_AOP编程(AspectJ)_概述
AspectJ 是一个框架 (第三方AOP框架 ),提供切面编程 ,编写一个Aspect 支持多个Advice和多个PointCut .对比前一种提到的传统的Aop编程,AspctJ更加的常用.Asp ...
- Bolts-Android
对Android客户端编程来说,有个明确的规则是不能在ui线程里面做耗时的操作.这样就要求网络请求.文件读写等等操作都要异步操作.而异步操作完成后,往往需要再更新ui界面.最直接的想法是回调,只要保证 ...
- C# Winform关于控件TabControl闪烁的问题
自己重写了一个Form,然后再该form上放一个TabControl鼠标移上去会闪烁,经过网上查找解决方案,最后总算是解决了....下面附上代码: 重写一个TabControl代码如下: using ...
- 使用ConfigurationManager类读写配置文件
使用ConfigurationManager类 读写配置文件app.config,以下为代码: view plaincopy to clipboard print? using System; usi ...
- 访问 IIS 元数据库失败 的解决方法
系统是windows xp sp3,vs2010.安装了iis 5.1 ,创建了虚拟目录之后copy进去一个web sercices测试下能不能正常工作. 出现如下问题: 访问 IIS 元数据库失败. ...
- 【超详细教程】使用Windows Live Writer 2012和Office Word 2013 发布
去年就知道有这个功能,不过没去深究总结过,最近有写网络博客的欲望了,于是又重新拾起这玩意儿. 具体到底是用Windows Live Writer 2012还是用Word 2013,个人觉得看个人,因为 ...
- ListView中多个EditText设置焦点 多次点击异常报错
08-17 18:23:09.825: ERROR/AndroidRuntime(1608): FATAL EXCEPTION: main 08-17 18:23:09.825: ERROR/Andr ...
- 安装Ubuntu 16.04后要做的事
Ubuntu 16.04发布了,带来了很多新特性,同样也依然带着很多不习惯的东西,所以装完系统后还要进行一系列的优化. 1.删除libreoffice libreoffice虽然是开源的,但是Java ...