Twenty Questions】的更多相关文章

十五 Twenty Questions Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Practice UVA 1252 Appoint description:  System Crawler  (2015-08-25) Description   Consider a closed world and a set of features that are defined…
题目传送门 /* 题意:给出一系列的01字符串,问最少要问几个问题(列)能把它们区分出来 状态DP+记忆化搜索:dp[s1][s2]表示问题集合为s1.答案对错集合为s2时,还要问几次才能区分出来 若和答案(自己拟定)相差小于等于1时,证说明已经能区分了,回溯.否则还要加问题再询问 */ /************************************************ * Author :Running_Time * Created Time :2015-8-13 10:54:…
Twenty Questions https://odzkskevi.qnssl.com/15b7eb4cd1f75f63cee3945b0b845e4f?v=1508411736 [题解] dp[S1][S2]表示已经询问了S1,确定有S2,还需要至少多少次询问 dp[S1][S2] = max(min(dp[S1 | k][S2 | k], dp[S1 | k, S2 | j)) + 1 即枚举询问哪一个k,得到答复是有/没有中取还需要的询问次数最大的,然后 在所有的k中找最小的,表示到了S…
题意: 有n个长为m的各不相同的二进制数(允许存在前导0),别人已经事先想好n个数中的一个数W,你要猜出这个数. 每次只可以询问该数的第K为是否为1. 问采用最优询问策略,则最少需要询问多少次能保证猜到. 比如有1100 和 0110两个数,只需要询问第一或第三位数是否为1,即可猜中,因此答案为1. 分析: d(s, a)表示已经询问了的集合s,在已经询问了的集合中W中为1的集合为a,还需要询问多少次. 如果下一次询问第k位,则询问次数为: 然后取所有k里的最小值即可. 预处理: 对于每个s和a…
题意: 有n个长度为m的二进制串,每个都是不同的. 为了把所有字符串区分开,你可以询问,每次可以问某位上是0还是1. 问最少提问次数,可以把所有字符串区分开来. 分析: dp[s1][s2]: 表示提问的问题是s1集合,答案是s2时,还需要问几次才可以全部区分开 当问题集合为{s1}时, 如果还不能区分所有答案,那么就需要继续再问一个问题, { s1 | (1<<j),  当s1的j位上为0的时候 } 如果和答案s2相同的个数小于等于1,那么已经可以全部区分开了 如果还没区分开继续下一个问题,…
题意:有n件物品,每件物品有m个特征,可以对特征进行询问,询问的结果是得知某个物体是否含有该特征,要把所有的物品区分出来(n个物品的特征都互不相同), 最小需要多少次询问? 析:我们假设心中想的那个物体为W,首先知道的是,同一个特征不用问多次,所以首先用一个集合s表示已经问的特征,在这里面有的是W具备的,有的不是, 所以再加一个集合a表示W所以具备的特征,并且a是s的子集.d(s, a) 表示问了特征集s,其中已经确认W所具备的特征集为a时,还要询问的最少次数. 再加一个状态,继续询问呗,所以次…
本文出自   http://blog.csdn.net/shuangde800 题目链接:点击打开链接 题目大意 有n个长度为m的二进制串,每个都是不同的. 为了把所有字符串区分开,你可以询问,每次可以问某位上是0还是1. 问最少提问次数,可以把所有字符串区分开来. 思路 f[s1][s2]: 表示提问的问题是{s1}集合,答案是{s2}时,还需要问几次才可以全部区分开 当问题集合为{s1}时, 如果还不能区分所有答案,那么就需要继续再问一个问题, 那么可以推出下一个问题的集合为: nextQu…
题目大意:有n件物品,每件物品有m个特征,可以对特征进行询问,询问的结果是得知某个物体是否含有该特征,要把所有的物品区分出来(n个物品的特征都互不相同)最小需要多少次询问? 题目分析:定义dp(s,a)表示询问了的特征集合为s,物体含有特征集合a中的所有特征,但不含特征集合 s^a 中的所有特征时还需的最少询问次数.状态转移方程为dp(s,a)=min(max(dp(s|(1<<k),a|(1<<k)),dp(s|(1<<k),a))+1). 用记忆化搜索的形式实现即可…
分析 为了叙述方便,设"心里想的物体"为W.首先在读入时把每个物体转化为一个二进制整数.不难发现,同一个特征不需要问两遍,所以可以用一个集合s表示已经询问的特征集. 在这个集合s中,有些特征是W所具备的,剩下的特征是W不具备的.用集合a来表示"已确认物体W具备的特征集",则a一定是s的子集. 设d(s,a)表示已经问了特征集s,其中已确认W所具备的特征集为a时,还需要询问的最小次数.如果下一次提问的对象是特征k(这就是"决策"),则询问次数为:…
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3693 题意: 有n(n≤128)个物体,m(m≤11)个特征.每个物体用一个m位01串表示,表示每个特征是具备还是不具备.我在心里想一个物体(一定是这n个物体之一),由你来猜.你每次可以询问一个特征,然后我会告诉你:我心里的物体是否具备这个特征.当你确定答案之后,就把答案告诉我(告…