P2002 扑克牌
时间: 1000ms / 空间: 131072KiB / Java类名: Main

背景

Admin生日那天,Rainbow来找Admin玩扑克牌……
玩着玩着Rainbow觉得太没意思了,于是决定给Admin一个考验~~~

描述

Rainbow把一副扑克牌(54张)随机洗开,倒扣着放成一摞。然后Admin从上往下依次翻开每张牌,每翻开一张黑桃、红桃、梅花或者方块,就把它放到对应花色的堆里去。
Rainbow想问问Admin,得到A张黑桃、B张红桃、C张梅花、D张方块需要翻开的牌的张数的期望值E是多少?
特殊地,如果翻开的牌是大王或者小王,Admin将会把它作为某种花色的牌放入对应堆中,使得放入之后E的值尽可能小。
由于Admin和Rainbow还在玩扑克,所以这个程序就交给你来写了~

输入格式

输入仅由一行,包含四个用空格隔开的整数,A,B,C,D。

输出格式

输出需要翻开的牌数的期望值E,四舍五入保留3位小数。
如果不可能达到输入的状态,输出-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 扑克牌 题解的更多相关文章

  1. tyvj 2002 扑克牌

    期望DP 本题递推比较麻烦,可以记忆化搜索 注意搜索的边界条件 以及每一次转移 #include <iostream> #include <cstdio> #include & ...

  2. TYVJ P2002 扑克牌

    背景 Admin生日那天,Rainbow来找Admin玩扑克牌……玩着玩着Rainbow觉得太没意思了,于是决定给Admin一个考验~~~ 描述 Rainbow把一副扑克牌(54张)随机洗开,倒扣着放 ...

  3. TYVJ计算几何

    今天讲了计算几何,发几道水水的tyvj上的题解... 计算几何好难啊!@Mrs.General....怎么办.... 这几道题都是在省选之前做的,所以前面的Point运算啊,dcmp啊,什么什么的,基 ...

  4. noip2002提高组题解

    再次280滚粗.今天早上有点事情,所以做题的时候一直心不在焉,应该是三天以来状态最差的一次,所以这个分数也还算满意了.状态真的太重要了. 第一题:均分纸牌 贪心.(昨天看BYVoid的noip2001 ...

  5. 组合数学---P1358 扑克牌

    P1358 扑克牌 题解 组合数学 Π c[剩余未选牌数][ai] ( i = 1,2,...,m ) 注意 组合数也要取模,不然数字太大会炸 组合数的具体实现就是Dp啊 代码 #include< ...

  6. 【POJ 1201 Intervals】

    Time Limit: 2000MSMeamory Limit: 65536K Total Submissions: 27949Accepted: 10764 Description You are ...

  7. POJ1417 True Liars —— 并查集 + DP

    题目链接:http://poj.org/problem?id=1417 True Liars Time Limit: 1000MS   Memory Limit: 10000K Total Submi ...

  8. 【51.64%】【POJ 1330】Nearest Common Ancestors

    Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 26416 Accepted: 13641 Description A roote ...

  9. usaco 2002 月赛 Fiber Communications 题解

    Description Farmer John wants to connect his N (1 <= N <= 1,000) barns (numbered 1..N) with a ...

随机推荐

  1. 在Windows中安装Boot2Docker 遇到 Unable to load R3 module 的解决方案

    引言 这个几乎是所有64位win7用户在virtual box上安装64位的linux都会遇到的问题(如果你用的是买机器的时候自带的win7 64位而且你没有重装过系统的除外). 解决办法 可参考以下 ...

  2. jquery datatable客户端分页保持

    请加入下面注释的参数,并强制刷新浏览器,即可解决,关键配置: "bStateSave":true, $("#tableID").DataTable({ &quo ...

  3. [loj2116]「HNOI2015」开店 动态点分治

    4012: [HNOI2015]开店 Time Limit: 70 Sec  Memory Limit: 512 MBSubmit: 2452  Solved: 1089[Submit][Status ...

  4. eclipse maven 配置

    http://www.cnblogs.com/little-YTMM/p/5970878.html

  5. python动态获取对象的属性和方法 (转)

    转自未知,纯个人笔记使用 首先通过一个例子来看一下本文中可能用到的对象和相关概念. #coding:utf-8 import sys def foo():pass class Cat(object): ...

  6. 在C#中使用CURL

    private string args = "";          /// <summary>         /// 参数         /// </sum ...

  7. overflow:scroll 在 iOS上滚动不流畅的问题

    添加下面属性: -webkit-overflow-scrolling: touch;

  8. 【BZOJ 2054】 2054: 疯狂的馒头 (并查集特技)

    Input 第一行四个正整数N,M,p,q Output 一共输出N行,第i行表示第i个馒头的最终颜色(如果最终颜色是白色就输出0). Sample Input 4 3 2 4 Sample Outp ...

  9. bzoj 3120 矩阵优化DP

    我的第一道需要程序建矩阵的矩阵优化DP. 题目可以将不同的p分开处理. 对于p==0 || p==1 直接是0或1 对于p>1,就要DP了.这里以p==3为例: 设dp[i][s1][s2][r ...

  10. Codeforces Beta Round #7 A. Kalevitch and Chess 水题

    A. Kalevitch and Chess 题目连接: http://www.codeforces.com/contest/7/problem/A Description A famous Berl ...