poj 3809 UVaLive 4643 Twenty Questions
2013-08-03 20:35
369 查看
#include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <iostream> #include <map> #include <vector> #include <algorithm> #include <set> using namespace std; #define clr(a, x) memset(a, x, sizeof(a)) #define rep(i, n) for (int i = 0; i < (int)(n); i++) #define REP(i,a,b) for(int i=a;i<=b;i++) const int maxn = 1<<11 ; char str[maxn]; int q[maxn];//每个人的回答 二进制表示 int dp[maxn][maxn]; int m,n; int DP(int s,int ans) //s表示已选问题的集合,ans 表示问题的答案 { if(dp[s][ans]!=-1) return dp[s][ans]; int num=0; for(int i=0;i<n;i++) if((s&q[i])==ans) num++; if(num<=1) return dp[s][ans]=0; //如果没有俩个人的答案是重复的 int res=maxn; for(int i=0;i<m;i++) { if(s&(1<<i)) continue; //选择一个未回答的问题 dp[s|(1<<i)][ans]=DP(s|(1<<i),ans); //答案为 否的 dp[s|(1<<i)][ans|(1<<i)]=DP(s|(1<<i),ans|(1<<i));// 答案为 是 的 res=min(res,max(dp[s|(1<<i)][ans],dp[s|(1<<i)][ans|(1<<i)])+1); //选择其中的较大者 } return dp[s][ans]=res; } int main() { //int m,n; while(~scanf("%d%d",&m,&n)&&(m||n)) { clr(q,0); for(int i=0;i<n;i++) { scanf("%s",str); for(int j=0;j<m;j++) q[i]=(q[i]<<1)+str[j]-'0'; } clr(dp,-1); printf("%d\n",DP(0,0)); } return 0; }
相关文章推荐
- UVALive 4643 Twenty Questions
- POJ1011 HDU1455 UVA307 UVALive5522 Sticks题解
- POJ 2296 Map Labeler / ZOJ 2493 Map Labeler / HIT 2369 Map Labeler / UVAlive 2973 Map Labeler
- POJ 1087 A Plug for UNIX / HDU 1526 A Plug for UNIX / ZOJ 1157 A Plug for UNIX / UVA 753 A Plug for UNIX / UVAlive 5418 A Plug for UNIX / SCU 1671 A Plug for UNIX (网络流)
- POJ3080 ZOJ2784 UVALive3628 Blue Jeans题解
- UVALIVE 2675 Peals (POJ 1260 HDU 1300)
- POJ 3090 ZOJ 2777 UVALive 3571 Visible Lattice Points(用递推比用欧拉函数更好)
- UVA 10817 UVALive 4643 状压dp
- UVALive - 4643 Twenty Questions (状态压缩)
- Poj 3150/UVA 1386/UVALive 3704 Cellular Automaton 循环矩阵
- UVALive5520 UVA305 POJ1012 HDU1443 Joseph【数学计算+打表+水题】
- POJ1006 UVA756 UVALive5421 Biorhythms【中国剩余定理】
- UVaLive 4643 / LA 4643 Twenty Questions(对题意的解释已修改)
- 曼哈顿最小距离生成树(poj 3241&& UVALive 3662)
- POJ1552 HDU1303 UVALive2782 ZOJ1760 Doubles【序列】
- POJ 1502 MPI Maelstrom / UVA 432 MPI Maelstrom / SCU 1068 MPI Maelstrom / UVALive 5398 MPI Maelstrom /ZOJ 1291 MPI Maelstrom (最短路径)
- POJ1964/UVALive 3029 -City Game -求最大子矩形-(暴力枚举/dp)
- Human Gene Functions - POJ 1080 UVaLive 2344 dp
- POJ3094 UVALive3594 HDU2734 ZOJ2812 Quicksum【进制】
- POJ 1459 Power Network / HIT 1228 Power Network / UVAlive 2760 Power Network / ZOJ 1734 Power Network / FZU 1161 (网络流,最大流)