zoukankan      html  css  js  c++  java
  • UVA 11205 The broken pedometer

    UVA_11205

    一开始在理解题意上面产生了严重的问题,后来看别人报告说是在给定的矩阵里面选出最少的列使得能区分每一行,还说实际上就是刘汝佳书上P120的子集生成问题。

    后来大概过了一天我终于搞明白了“在给定的矩阵里面选出最少的列使得能区分每一行”是什么意思,之后就是枚举所有可能的列的组合,如果符合要求就更新表示最少列数的min即可。

    #include<stdio.h>
    #include
    <string.h>
    int a[110][20],P,N,hash[100000],fac[20];
    int main()
    {
    int i,j,k,t,min,sum,num,ok;
    fac[
    0]=1;
    for(i=1;i<20;i++)
    fac[i]
    =2*fac[i-1];
    scanf(
    "%d",&t);
    while(t--)
    {
    scanf(
    "%d%d",&P,&N);
    for(i=0;i<N;i++)
    for(j=0;j<P;j++)
    scanf(
    "%d",&a[i][j]);
    min
    =1000000000;
    for(i=0;i<(1<<P);i++)
    {
    memset(hash,
    0,sizeof(hash));
    num
    =0;
    for(k=0;k<P;k++)
    if(i&(1<<k))
    num
    ++;
    ok
    =1;
    for(j=0;j<N;j++)
    {
    sum
    =0;
    for(k=0;k<P;k++)
    if(i&(1<<k))
    sum
    +=fac[k]*a[j][k];
    if(hash[sum]==0)
    hash[sum]
    =1;
    else
    {
    ok
    =0;
    break;
    }
    }
    if(ok&&num<min)
    min
    =num;
    }
    printf(
    "%d\n",min);
    }
    return 0;
    }

      

  • 相关阅读:
    idea2020 安装
    739. 每日温度
    图像翻转
    257. 二叉树的所有路径
    1466. 重新规划路线
    面试题 04.05. 合法二叉搜索树
    671. 二叉树中第二小的节点
    965. 单值二叉树
    648. 单词替换
    137. 只出现一次的数字 II
  • 原文地址:https://www.cnblogs.com/staginner/p/2163990.html
Copyright © 2011-2022 走看看