zoukankan      html  css  js  c++  java
  • UVa 11025 The broken pedometer【枚举子集】

    题意:给出一个矩阵,这个矩阵由n个数的二进制表示,p表示用p位二进制来表示的一个数 问最少用多少列就能将这n个数区分开

    枚举子集,然后统计每一种子集用了多少列,维护一个最小值

    b[i]==1代表的是选择了这一列

     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstring> 
     4 #include <cmath> 
     5 #include<stack>
     6 #include<vector>
     7 #include<map> 
     8 #include<set>
     9 #include<queue> 
    10 #include<algorithm>  
    11 using namespace std;
    12 
    13 #define foreach(i,c) for (__typeof(c.begin()) i = c.begin(); i != c.end(); ++i)
    14 
    15 typedef long long LL;
    16 const int INF = (1<<30)-1;
    17 const int mod=1000000007;
    18 const int maxn=100005;
    19 
    20 int b[maxn],a[505][505];
    21 int minn,n,p;
    22 
    23 void solve(){
    24     for(int i=0;i<n-1;i++){        
    25         for(int j=i+1;j<n;j++){
    26             int flag=0;            
    27             for(int k=0;k<p;k++)
    28                 if(b[k]&&a[i][k]!=a[j][k]) flag=1;//b[k]==1代表的是选择了这一列 
    29 
    30             if(flag==0) return;
    31         }        
    32     }
    33     
    34     int ans=0;
    35     for(int i=0;i<p;i++)
    36     if(b[i]) ans++;
    37     
    38 //    printf("ans=%d
    ",ans);
    39 //    printf("minn=%d
    ",minn);
    40     minn=min(minn,ans);
    41 }
    42 
    43 void subset(int cur){
    44     if(cur==p){
    45         solve();
    46         return;
    47     }
    48     b[cur]=1;
    49     subset(cur+1);
    50     b[cur]=0;
    51     subset(cur+1);    
    52 } 
    53 
    54 int main(){
    55 //    freopen("in.txt","r",stdin);
    56 //    freopen("out.txt","w",stdout);
    57     int T;
    58     cin>>T;
    59         while(T--){
    60             cin>>p>>n;
    61             for(int i=0;i<n;i++)
    62              for(int j=0;j<p;j++)
    63              cin>>a[i][j];
    64              
    65              minn=p;
    66              subset(0);
    67              printf("%d
    ",minn);
    68         }
    69     return 0;    
    70 }
    View Code

    自己做的时候题目都没有读懂----sad------------

    加油加油--

  • 相关阅读:
    sqlserver中判断表或临时表是否存在
    Delphi 简单方法搜索定位TreeView项
    hdu 2010 水仙花数
    hdu 1061 Rightmost Digit
    hdu 2041 超级楼梯
    hdu 2012 素数判定
    hdu 1425 sort
    hdu 1071 The area
    hdu 1005 Number Sequence
    hdu 1021 Fibonacci Again
  • 原文地址:https://www.cnblogs.com/wuyuewoniu/p/4472762.html
Copyright © 2011-2022 走看看