UVa 1252 - Twenty Questions(记忆化搜索,状态压缩dp)
本文出自 http://blog.csdn.net/shuangde800
题目链接:点击打开链接
题目大意
有n个长度为m的二进制串,每个都是不同的。
为了把所有字符串区分开,你可以询问,每次可以问某位上是0还是1。
问最少提问次数,可以把所有字符串区分开来。
思路
f[s1][s2]: 表示提问的问题是{s1}集合,答案是{s2}时,还需要问几次才可以全部区分开
当问题集合为{s1}时, 如果还不能区分所有答案,那么就需要继续再问一个问题,
那么可以推出下一个问题的集合为:
nextQuestions = { s1 | (1<<k), 当s1的k位上为0的时候 }
那么可以得到:
f[s1][s2] = 0, 如果和答案s2相同的个数小于等于1,那么已经可以全部区分开了,还要询问0次
f[s1][s2] = { min(f[nextQuestions][s1], f[nextQuestions][s1^(1<<k)]), 当s1的k位上为0时}
代码
/**==========================================
* This is a solution for ACM/ICPC problem
*
* @source:uva-1252 Twenty Question
* @type: 记忆化搜索
* @author: shuangde
* @blog: blog.csdn.net/shuangde800
* @email: zengshuangde@gmail.com
*===========================================*/
#include#include#include#include#include#include#includeusing namespace std; typedef long long int64; const int INF = 0x3f3f3f3f; const double PI = acos(-1.0); const int MAXN = 130; int n, m; int p[MAXN]; int f[(1<<11)+10][(1<<11)+10]; int dfs(int s1, int s2){ if(f[s1][s2] != INF) return f[s1][s2]; int cnt = 0; for(int i = 0; i < n; ++i) if( (p[i] & s1) == s2) ++cnt; if(cnt <= 1){ f[s1][s2] = 0; return 0; } for(int i=0; i
UVa 1252 - Twenty Questions(记忆化搜索,状态压缩dp)相关推荐
- 【BZOJ2246】【codevs2135】迷宫探险,概率DP+记忆化搜索+状态压缩+运气
Time:2016.08.24 Author:xiaoyimi 转载注明出处谢谢 传送门1 传送门2 思路: 毒瘤题目 考虑f[i][x][y][h]f[i][x][y][h]表示走到(x,y),血量 ...
- UVA - 10118Free Candies(记忆化搜索)
题目:UVA - 10118Free Candies(记忆化搜索) 题目大意:给你四堆糖果,每个糖果都有颜色.每次你都只能拿任意一堆最上面的糖果,放到自己的篮子里.如果有两个糖果颜色相同的话,就可以将 ...
- uva 11762 数学期望+记忆化搜索
题目大意:给一个正整数N,每次可以在不超过N的素数中随机选择一个P,如果P是N的约数,则把N变成N/p,否则N不变,问平均情况下需要多少次随机选择,才能把N变成1? 分析:根据数学期望的线性和全期望公 ...
- uva 1252——Twenty Questions
题意:给定n个物品,每个物品用01串表示,表示具备与否某个特征,然后每次可以询问一个特征,问最少询问几次能够确定一个物品. 思路:状压Dp,将这些数的特征压缩成一个数,把询问过的和没询问的都用一集合表 ...
- uva 10118 - Free Candies(记忆化搜索)
题目大意:10118 - Free Candies 题目大意:有4堆糖果, 每堆糖果有n颗糖果,然后给出每颗糖果的类型1~20,然后只有取走当前堆的前面一颗糖果后才可以取后面的糖果, 然后小伙伴有一个 ...
- 牛客假日团队赛5 F 随机数 BZOJ 1662: [Usaco2006 Nov]Round Numbers 圆环数 (dfs记忆化搜索的数位DP)...
链接:https://ac.nowcoder.com/acm/contest/984/F 来源:牛客网 随机数 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言6 ...
- PAT甲级1090 Highest Price in Supply Chain:[C++题解]树、结点到根结点的距离、记忆化搜索、树形dp
文章目录 题目分析 题目链接 题目分析 来源:acwing 和PAT甲级1079 Total Sales of Supply Chain:[C++题解] 树.结点到根结点的距离.树形dp.记忆化搜索是 ...
- 【HDU - 4784】Dinner Coming Soon(记忆化搜索bfs,dp)
题干: Coach Pang loves his boyfriend Uncle Yang very much. Today is Uncle Yang's birthday, Coach Pang ...
- UVA - 10118 Free Candies 记忆化搜索经典
思路:d[a][b][c][d]表示从已经第一个篮子取了a颗糖,第二个取了b颗糖,第三个取了c颗糖,第四个取了d颗糖最多还能够获得多少糖果.首先明白一个问题:如果能分别取a,b,c,d个,不论如何取, ...
最新文章
- java 中线程的状态
- strcpy和memcpy的区别(转)
- mysql 虚拟环境搭建_pycharm虚拟环境virtualnv安装MySQL扩展
- ListView通过自定义适配器来显示数据并对Item项以及子view项的控件实现监听.
- Charles 某音最新版本抓包环境搭建
- [已经完美解决]IE下 'document.getElementById(...)' is null
- sql删除语句_Part 3 | SQL学习:删除行
- 软件需求说明的前世和今生
- Activiti实战. 1.5Activiti架构与组件
- 关于Xcode6编译Pods工程出错问题
- python测试题 --- 列表元素处理
- linux启动流程——initrd和initramfs
- 设定行车路线实验matlab,桥式吊车小车运动控制系统的建模及MATLAB仿真讲解.doc...
- MySql字符集修改
- Ubuntu16.04 使用小米WiFi 变无线网卡
- Python -- 使用if语句处理列表
- openlayer添加自定义图片图层
- matlab2018在图片上添加文字并保存且图片没有白边
- C++ Reference: Standard C++ Library reference: C Library: cstdio: fprintf
- 拓扑序列(拓扑排序)