zoukankan      html  css  js  c++  java
  • uva-11205-枚举子集

      题意:

    至少用多少列来表示输入中的二进制数,并且表示的数里面没有重复,最多P列,N个二进制数

    所以......表示的最大二进制数是2^P,那么在2^P方内的数二进制最大值是P个1,最小是0,所以,枚举2^P次方内的数k.和输入的二进制余,判断是否会重复,

    如果没有重复,把k里面二进制是1的拿出来就是我们枚举的列

    #include<stdio.h>
    #include<iostream>
    #include<sstream>
    #include<queue>
    #include<map>
    #include<memory.h>
    #include <math.h>
    #include<time.h>
    #include <stdlib.h>
    #include <algorithm>
    using namespace std;
    #define N 10
    #define P 15
    int a[N];
    int b[1000];
    int vis[N];
    
    int main(const int argc, char** argv)
    {
    	freopen("d:\1.txt", "r", stdin);
    	int t1, p, n;
    	cin >> t1;
    	while (t1--)
    	{
    		memset(a, sizeof(a), 0);
    		cin >> p >> n;
    		for(int i = 0; i < n; i++)
    		{
    			int t2;
    			for(int j = 0; j < p; j++)
    			{
    				cin >> t2;
    				a[i] = a[i] * 2 + t2;
    			}
    		}
    		int ans = 20;
    		for(int i = 0; i < (1 << p); i++)
    		{
    			int flag = 0;
    			int k = 0;
    			for(int j = 0; j < n; j++)
    			{
    				int k2 = i & a[j];
    				for(int k3 = 0; k3 < k; k3++)
    					if(b[k3] == k2)
    					{
    						flag = 1;
    						break;
    					}
    				b[k++] = k2;
    			}
    			if(!flag)
    			{
    				int t = 0;
    				for(int kk = 0; kk < p; kk++)
    				{
    					if(i & (1 << kk))
    						t++;
    				}
    				ans = t < ans ? t : ans;
    			}
    		}
    		cout << ans << endl;
    		ans = 20;
    	}
    }
    

      

  • 相关阅读:
    GRUB引导——menu.lst的写法
    条形码类型及常见条形码介绍
    Tmux:终端复用器
    find+*的问题
    find命令之exec
    Linux core 文件介绍
    C语言中返回字符串函数的四种实现方法
    C语言中的volatile
    Stars
    Game with Pearls
  • 原文地址:https://www.cnblogs.com/shuiyonglewodezzzzz/p/7836581.html
Copyright © 2011-2022 走看看