uva 1252 - Twenty Questions(记忆化搜索)

2014-11-24 09:43:15 · 作者: · 浏览: 0

题目链接:uva 1252 - Twenty Questions


题目大意:给出m和n,表示有n个长度为m且由01组成的字符串,要求询问k个位置,以区分这n个字符串,每次询问一个位置,将会得到该位置的字符,注意询问k次的位置并非固定:

例:5 4

10100

11000

00001

00010

ans = 2;询问了第1个位置后,区分开了(1)(2)和(3)(4),然而区分(1)(2)只要询问2或者3即可,区分(3)(4)只要询问4或者5即可。


解题思路:记忆化搜索,dp[x][y]表示区分 询问了x(二进制)这几个位置后状态为y的最优次数,每次需要遍历一遍字符串,计算当前有多少个字符串满足询问x状态为y,如果小于等于1即不用再询问就可以区分了;否则要枚举还没询问的位置,然后取max(solve(x|(1<


#include 
  
   
#include 
   
     #include 
    
      using namespace std; const int N = 150; const int M = 12; const int INF = 0x3f3f3f3f; int n, m, dp[1<