用每个人的血量作为状态去搜索T飞,考虑题解中更好的搜索方式:每种血量有多少个人作为状态。这样会减去很多重复的状态,因为只要乘一下就得到了所有相同情况的和。

虽然我不会算,但是直观感受起来复杂度比较优秀。

#include <cstdio>
#include <unordered_map>
using namespace std; typedef double db;
typedef long long ll; int n, m, d, mod = 1e6;
int cnt[2][10];
unordered_map<ll, db> mp; void read(int n, int k) {
for (int a, i = 1; i <= n; i++) {
scanf("%d", &a);
cnt[k][a]++;
}
} ll tran(ll res = 0) {
for (int i = 0; i < 2; i++)
for (int j = 1; j <= 6; j++)
res = res * 10 + cnt[i][j];
return res;
} db dfs(ll t, int depth) {
if (mp.count(t)) return mp[t];
if (t % mod == 0) return mp[t] = 1;
if (depth == d) return mp[t] = 0; db res = 0; int tmp = 0;
for (int i = 0; i < 2; i++)
for (int j = 1; j <= 6; j++)
tmp += cnt[i][j];
for (int i = 0; i < 2; i++) {
for (int j = 1; j <= 6; j++) {
if (cnt[i][j]) {
cnt[i][j]--;
cnt[i][j - 1]++;
res += dfs(tran(), depth + 1) * (cnt[i][j] + 1) / tmp;
cnt[i][j]++;
cnt[i][j - 1]--;
}
}
}
return mp[t] = res;
} int main() {
scanf("%d %d %d", &n, &m, &d);
read(n, 0), read(m, 1);
return !printf("%.8lf\n", dfs(tran(), 0));
}

GYM 101933E(记忆化搜索)的更多相关文章

  1. GYM 100608G 记忆化搜索+概率 2014-2015 Winter Petrozavodsk Camp, Andrew Stankevich Contest 47 (ASC 47)

    https://codeforces.com/gym/100608 题意: 两个人玩游戏,每个人有一个长为d的b进制数字,两个人轮流摇一个$[0,b-1]$的骰子,并将选出的数字填入自己的d个空位之中 ...

  2. Codeforces Gym 100231G Voracious Steve 记忆化搜索

    Voracious Steve 题目连接: http://codeforces.com/gym/100231/attachments Description 有两个人在玩一个游戏 有一个盆子里面有n个 ...

  3. Codeforces Gym 191033 E. Explosion Exploit (记忆化搜索+状压)

    E. Explosion Exploit time limit per test 2.0 s memory limit per test 256 MB input standard input out ...

  4. 【每日dp】 Gym - 101889E Enigma 数位dp 记忆化搜索

    题意:给你一个长度为1000的串以及一个数n 让你将串中的‘?’填上数字 使得该串是n的倍数而且最小(没有前导零) 题解:dp,令dp[len][mod]为是否出现过 填到第len位,余数为mod 的 ...

  5. Loppinha, the boy who likes sopinha Gym - 101875E (dp,记忆化搜索)

    https://vjudge.net/contest/299302#problem/E 题意:给出一个01 0101串,然后能量计算是连续的1就按1, 2, 3的能量加起来.然后给出起始的能量,求最少 ...

  6. [ACM_动态规划] 数字三角形(数塔)_递推_记忆化搜索

    1.直接用递归函数计算状态转移方程,效率十分低下,可以考虑用递推方法,其实就是“正着推导,逆着计算” #include<iostream> #include<algorithm> ...

  7. 【BZOJ-3895】取石子 记忆化搜索 + 博弈

    3895: 取石子 Time Limit: 1 Sec  Memory Limit: 512 MBSubmit: 263  Solved: 127[Submit][Status][Discuss] D ...

  8. hdu3555 Bomb (记忆化搜索 数位DP)

    http://acm.hdu.edu.cn/showproblem.php?pid=3555 Bomb Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  9. zoj 3644(dp + 记忆化搜索)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4834 思路:dp[i][j]表示当前节点在i,分数为j的路径条数,从 ...

  10. loj 1044(dp+记忆化搜索)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26764 思路:dp[pos]表示0-pos这段字符串最少分割的回文 ...

随机推荐

  1. 【转】PHP生成器 (generator)和协程的实现

    原文地址:https://phphub.org/topics/1430 1.一切从 Iterator 和 Generator 开始 为便于新入门开发者理解,本文一半篇幅是讲述迭代器接口(Iterato ...

  2. 常见的25个python面试问答

    常见的25个python面试问答 说到好用简洁的大数据技术,除了Hadoop.R等等,Python也是其中熠熠生辉的一员,因而广受企业和商家的青睐.求职季,不少应聘者在面试相关职业时都被要求掌握Pyt ...

  3. listen and translation exercise 53

    It was hard work and there weren't any interesting things for him. You should be an expert with comp ...

  4. GSM —— 商业蜂窝通信系统

    用户漫游: HLR:当用户办卡时,当地运营商把用户资料(归属地信息等)输入 HLR: VLR:当用户漫游到别的城市时,漫游地的 VLR 把用户资料从 HLR 复制过来,用户便可以继续享受运营商的通信服 ...

  5. MongoDB 使用经验笔记

    bin下的mongod就是MongoDB的服务端进程,mongo就是其客户端,其它的命令用于MongoDB的其它用途如MongoDB文件导出等 启动方式: 1.直接启动,指定各项参数: /usr/lo ...

  6. HDU1828:Picture

    浅谈树状数组与线段树:https://www.cnblogs.com/AKMer/p/9946944.html 题目传送门:http://acm.hdu.edu.cn/showproblem.php? ...

  7. 杂项随记:gcc/objdump/section等

    gcc -g 如果不打开-g或者-ggdb(GDB专用)调试开关,GCC编译时不会加入调试信息,因为这会增大生成代码的体积.GCC采用了分级调试,通过在-g选项后附加数字1.2或3来指定在代码中加入调 ...

  8. 【244】◀▶IEW-Unit09

    Unit 9 Food 1)Model1题目及范文讲解 In the world today, there is a problem with food production. As a result ...

  9. [51nod1102]面积最大的矩形(单调栈||预处理)

    题意:求序列上某区间最小值乘区间长度的最大值. 解题关键:很早就在<挑战程序设计竞赛>中见过了,单调栈模板题,注意弹栈时如何处理后面的元素. 法一:单调栈 #include<bits ...

  10. 创建Maven项目步骤

    (转自:http://blog.csdn.net/chuyuqing/article/details/28879477) 使用eclipse插件创建一个web project 首先创建一个Maven的 ...