HDU5816 Hearthstone
Hearthstone
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 1110 Accepted Submission(s): 548
card to solve this dilemma. We call this "Shen Chou Gou" in Chinese.

Now you are asked to calculate the probability to become a "Shen Chou Gou" to kill your enemy in this turn. To simplify this problem, we assume that there are only two kinds of cards, and you don't need to consider the cost of the cards.
-A-Card: If the card deck contains less than two cards, draw all the cards from the card deck; otherwise, draw two cards from the top of the card deck.
-B-Card: Deal X damage to your enemy.
Note that different B-Cards may have different X values.
At the beginning, you have no cards in your hands. Your enemy has P Hit Points (HP). The card deck has N A-Cards and M B-Cards. The card deck has been shuffled randomly. At the beginning of your turn, you draw a card from the top of the card deck. You can use
all the cards in your hands until you run out of it. Your task is to calculate the probability that you can win in this turn, i.e., can deal at least P damage to your enemy.

Then come three positive integers P (P<=1000), N and M (N+M<=20), representing the enemy’s HP, the number of A-Cards and the number of B-Cards in the card deck, respectively. Next line come M integers representing X (0<X<=1000) values for the B-Cards.
3 1 2
1 2
3 5 10
1 1 1 1 1 1 1 1 1 1
46/273
牌堆有n张奥术智慧,奥术智慧可以再从牌堆摸两张牌, m张伤害牌,伤害各为xi,初始从牌堆摸一张,问本回合能击杀给定hp的对手的概率,结果用分数表示。(n+m<=20)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <vector>
#include <bitset> using namespace std; #define LL long long
const int INF = 0x3f3f3f3f;
#define MAXN 500 LL dp[1<<21];
LL f[22];
int d[20];
LL gcd(LL x,LL y)
{
return x?gcd(y%x,x):y;
} int main()
{
f[0]=1;
for(int i=1; i<21; i++)
f[i]=f[i-1]*i; int T,m,n,p;
for(scanf("%d",&T); T--;)
{
scanf("%d%d%d",&p,&n,&m);
for(int i=0; i<m; i++)
scanf("%d",&d[i]);
int N=m+n;
memset(dp,0,sizeof dp);
dp[0]=1;
for(int x=0; x<(1<<N); x++)
{
int a=0,b=0,k=0;
for(int i=0; i<m; i++)
{
if(x&(1<<i))
{
k+=d[i];
b++;
}
}
if(k>=p) continue;//伤害够了不抽了
for(int i=m; i<N; i++)
{
if(x&(1<<i))
{
a++;
}
}
if(a-b+1<=0) continue;//牌不能再抽了 for(int i=0;i<N;i++)
{
if(x&(1<<i)) continue;
dp[x^(1<<i)]+=dp[x];//在抽一张的状态数加上现在的状态
}
}
LL ans=0;
for(int x=0;x<(1<<N);x++)
{
if(dp[x]==0) continue;
int a=0,b=0,k=0;
for(int i=0; i<m; i++)
{
if(x&(1<<i))
{
k+=d[i];
b++;
}
}
if(k<p) continue;
for(int i=m; i<N; i++)
{
if(x&(1<<i))
{
a++;
}
}
if(a-b+1<0) continue;
ans+=dp[x]*f[N-a-b];
}
printf("%lld/%lld\n",ans/gcd(ans,f[N]),f[N]/gcd(ans,f[N]));
}
return 0;
}
HDU5816 Hearthstone的更多相关文章
- 多校7 HDU5816 Hearthstone 状压DP+全排列
多校7 HDU5816 Hearthstone 状压DP+全排列 题意:boss的PH为p,n张A牌,m张B牌.抽取一张牌,能胜利的概率是多少? 如果抽到的是A牌,当剩余牌的数目不少于2张,再从剩余牌 ...
- HDU5816 Hearthstone(状压DP)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5816 Description Hearthstone is an online collec ...
- hdu-5816 Hearthstone(状压dp+概率期望)
题目链接: Hearthstone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Other ...
- HDU 5816 Hearthstone
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Descript ...
- HDU 5816 Hearthstone (状压DP)
Hearthstone 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5816 Description Hearthstone is an onlin ...
- HDU 5816 Hearthstone 概率dp
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5816 Hearthstone Time Limit: 2000/1000 MS (Java/Othe ...
- Google Deepmind AI tries it hand at creating Hearthstone and Magic: The Gathering cards
http://www.techrepublic.com/article/google-deepmind-ai-tries-it-hand-at-creating-hearthstone-magic-t ...
- Programming a Hearthstone agent using Monte Carlo Tree Search(chapter one)
Markus Heikki AnderssonHåkon HelgesenHesselberg Master of Science in Computer Science Submission dat ...
- How to appraise Hearthstone card values
https://elie.net/blog/hearthstone/how-to-appraise-hearthstone-card-values/ In 2014, I became an avid ...
随机推荐
- dotnet不是内部或外部的命令,也不是可运行的程序或批处理文件
该问题是由于电脑环境变量配置错误所导致.最初在网上查找的方法,是在系统环境变量path中添加以下语句: %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\ ...
- pandas进行条件格式化以及线性回归的预测
条件格式化 需求1: 将三次考试的成绩小于60分的值找出来,并将字体变为红色 需求2: 将每次考试的第一名找出来,将背景变为绿色 需求3: 使用背景颜色的深浅来表示数值的大小 需求4: 使用数据条的长 ...
- 元组拆包 与 python拆包
一.元组拆包(元组解包.迭代解包) 元组拆包可以应用到任何可迭代对象上(任何迭代对象),被可迭代对象中的元素数量必须要跟接受这些元素的元组的空档数一致.也可以使用用 * 来表示忽略多余的元素. 一般的 ...
- Flipping an Image
Given a binary matrix A, we want to flip the image horizontally, then invert it, and return the resu ...
- linux命令总结----转载
1.终端是个奇妙的东西,一开始它的低颜值,高难度可能会令我们灰心气馁. 但是入门之后,你会发现终端命令行是如此强大,简直飞一般的感觉.就是这个feel,倍儿爽~ 享受“弹指间,一切尽在掌握”的感觉. ...
- npm 离线安装依赖
现实场景:一台自己的电脑可以连外网,一台开发机不能连网,开发机需要安装node_modules 依赖解决办法: npm 安装依赖分为两种,一是 -g 这种是安装在全局环境的,只有在电脑中 ...
- poj 2778 AC自动机+矩阵快速幂
题目链接:https://vjudge.net/problem/POJ-2778 题意:输入n和m表示n个病毒,和一个长为m的字符串,里面只可以有'A','C','G','T' 这四个字符,现在问这个 ...
- 记录-springcloud -mybatis
搭建springcloud与mybatis 从数据库读取数据返回到浏览器 1:我的工程目录 entity 和mapper 中的代码 controller和service的代码 启动类的文件:记得加包 ...
- iview组件select无法手动设置值
听小伙伴说iview的作者已经修复这个bug了,因为我们的组件库是copyiview后修改的,所以没有更新代码 这里提供一个方法 <i-select :ref="'signSlectR ...
- express基础项目创建
https://www.cnblogs.com/zhentaoo/p/6392248.html