本文出自   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)相关推荐

  1. 【BZOJ2246】【codevs2135】迷宫探险,概率DP+记忆化搜索+状态压缩+运气

    Time:2016.08.24 Author:xiaoyimi 转载注明出处谢谢 传送门1 传送门2 思路: 毒瘤题目 考虑f[i][x][y][h]f[i][x][y][h]表示走到(x,y),血量 ...

  2. UVA - 10118Free Candies(记忆化搜索)

    题目:UVA - 10118Free Candies(记忆化搜索) 题目大意:给你四堆糖果,每个糖果都有颜色.每次你都只能拿任意一堆最上面的糖果,放到自己的篮子里.如果有两个糖果颜色相同的话,就可以将 ...

  3. uva 11762 数学期望+记忆化搜索

    题目大意:给一个正整数N,每次可以在不超过N的素数中随机选择一个P,如果P是N的约数,则把N变成N/p,否则N不变,问平均情况下需要多少次随机选择,才能把N变成1? 分析:根据数学期望的线性和全期望公 ...

  4. uva 1252——Twenty Questions

    题意:给定n个物品,每个物品用01串表示,表示具备与否某个特征,然后每次可以询问一个特征,问最少询问几次能够确定一个物品. 思路:状压Dp,将这些数的特征压缩成一个数,把询问过的和没询问的都用一集合表 ...

  5. uva 10118 - Free Candies(记忆化搜索)

    题目大意:10118 - Free Candies 题目大意:有4堆糖果, 每堆糖果有n颗糖果,然后给出每颗糖果的类型1~20,然后只有取走当前堆的前面一颗糖果后才可以取后面的糖果, 然后小伙伴有一个 ...

  6. 牛客假日团队赛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 ...

  7. PAT甲级1090 Highest Price in Supply Chain:[C++题解]树、结点到根结点的距离、记忆化搜索、树形dp

    文章目录 题目分析 题目链接 题目分析 来源:acwing 和PAT甲级1079 Total Sales of Supply Chain:[C++题解] 树.结点到根结点的距离.树形dp.记忆化搜索是 ...

  8. 【HDU - 4784】Dinner Coming Soon(记忆化搜索bfs,dp)

    题干: Coach Pang loves his boyfriend Uncle Yang very much. Today is Uncle Yang's birthday, Coach Pang ...

  9. UVA - 10118 Free Candies 记忆化搜索经典

    思路:d[a][b][c][d]表示从已经第一个篮子取了a颗糖,第二个取了b颗糖,第三个取了c颗糖,第四个取了d颗糖最多还能够获得多少糖果.首先明白一个问题:如果能分别取a,b,c,d个,不论如何取, ...

最新文章

  1. java 中线程的状态
  2. strcpy和memcpy的区别(转)
  3. mysql 虚拟环境搭建_pycharm虚拟环境virtualnv安装MySQL扩展
  4. ListView通过自定义适配器来显示数据并对Item项以及子view项的控件实现监听.
  5. Charles 某音最新版本抓包环境搭建
  6. [已经完美解决]IE下 'document.getElementById(...)' is null
  7. sql删除语句_Part 3 | SQL学习:删除行
  8. 软件需求说明的前世和今生
  9. Activiti实战. 1.5Activiti架构与组件
  10. 关于Xcode6编译Pods工程出错问题
  11. python测试题 --- 列表元素处理
  12. linux启动流程——initrd和initramfs
  13. 设定行车路线实验matlab,桥式吊车小车运动控制系统的建模及MATLAB仿真讲解.doc...
  14. MySql字符集修改
  15. Ubuntu16.04 使用小米WiFi 变无线网卡
  16. Python -- 使用if语句处理列表
  17. openlayer添加自定义图片图层
  18. matlab2018在图片上添加文字并保存且图片没有白边
  19. C++ Reference: Standard C++ Library reference: C Library: cstdio: fprintf
  20. 拓扑序列(拓扑排序)

热门文章

  1. 【我的新学期】学习季
  2. Hook修改微信余额
  3. Extraction failed.
  4. STM32+ESP-01对接阿里飞燕平台
  5. 计算机 自考 学分制,学分制自考政策是什么
  6. 磁盘无法打开,格式是RAW
  7. 流年的最新伤感日志:年轻的时候,会轻狂
  8. c++小游戏之文字版MC
  9. 华为2022届校招2021-11-17机考
  10. Windows10清理预留存储