码迷,mamicode.com
首页 > 其他好文 > 详细

uva1252

时间:2018-10-08 13:28:54      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:c++   ems   mes   main   efi   cin   col   图片   ace   

dp[s][a]已询问{s}有{a}特征,还需要查询几次才能明确是哪一样物品。

答案为dp[0][0].

技术分享图片
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,m;
short dp[2050][2050];
ll a[200],s0;
int main(){
    freopen("p.in","r",stdin);
    ios::sync_with_stdio(false);
    cin>>m>>n;
    while(n+m!=0){
        memset(dp,0,sizeof(dp));
    for(int i=1;i<=n;i++){
    ll sum=0,x;
    char c;
    for(int j=1;j<=m;j++){
    cin>>c;
    if(c==0)x=0;else x=1;
    sum=sum*2+x;
    }
    a[i]=sum;
    }
    for(int s=(1<<m)-1;s>=0;s--){
     s0=s;
     while(1){
     bool az=1;
     ll cnt=0;
     for(int j=1;j<=n;j++){
         ll tmp=a[j]&s;
         if(tmp==s0)cnt++;
         if(cnt>1){az=0;break;}
         }
    if(az)dp[s][s0]=0;else{
    ll miner=1000;
    for(int i=1;i<=m;i++){
        ll u=1<<(i-1);
        if((u&s)==0){
        ll q;
        q=max(dp[s|u][s0|u],dp[s|u][s0]);
        miner=min(q,miner);
        }
        }
        dp[s][s0]=miner+1;}
        if(!s0)break;
        s0=(s0-1)&s;
    }
}
    cout<<dp[0][0]<<endl;    
    cin>>m>>n;
    }
    return 0;
}
View Code

 

uva1252

标签:c++   ems   mes   main   efi   cin   col   图片   ace   

原文地址:https://www.cnblogs.com/lxzl/p/9753744.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!