sgu-262 Symbol Recognition

题目大意:

有K个N?M的01矩阵(1<=N,M<=10,2<=K<=6),保证两两不同,然后要你从N?M矩阵中选出最少的位置,使得仅靠这些位置就能区分这K个矩阵。

解题思路:

我们观察到K的范围,发现如果我们将所有矩阵两两是否可以区分的信息存储下来需要的空间是2K?(K?1)2,是可以承受的,然后我们逐格dp,F[i][j][G]表示考虑到了第(i,j)并且区分状态是G时所需的最小的选取数,然后我们可以预处理出对于选取(i,j)可以区分那几对矩阵。

所以最后的答案就是F[N][M][2K?(K?1)2?1]。

AC代码:

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>

using namespace std;

int N,M;
int K;
int ch[10][20][20]={{{0}}};
int change[20][20]={{0}};
int F[33000]={0};
bool Matrix[33000][11][11]={{{0}}};
int need[20][20]={{0}};

int main()
{
    scanf("%d%d%d",&N,&M,&K);
    for(int i=1;i<=K;i++)
        for(int p=1;p<=N;p++)
            for(int q=1;q<=M;q++)
            {
                scanf("%1d",&ch[i][p][q]);
                for(int j=1;j<i;j++)
                    if(ch[i][p][q]!=ch[j][p][q])
                        change[p][q]|=(1<<((i-2)*(i-1)/2-1+j));
            }
    memset(F,0x3f3f3f3f,sizeof(F));
    int Max=(1<<(K*(K-1)/2))-1;
    F[0]=0;
    int cnt=0;
    for(int i=1;i<=N;i++)
        for(int j=1;j<=M;j++)
        {
            for(int p=Max-1;p>=0;p--)
            {
                if(change[i][j]==0) continue;
                if(F[p]+1<F[p|change[i][j]])
                {
                    F[p|change[i][j]]=F[p]+1;
                    memcpy(Matrix[p|change[i][j]],Matrix[p],sizeof(Matrix[p]));
                    Matrix[p|change[i][j]][i][j]=1;
                }
            }
        }
    printf("%d\n",F[Max]);
    for(int i=1;i<=N;i++)
    {
        for(int j=1;j<=M;j++)
            printf("%d",Matrix[Max][i][j]);
        puts("");
    }
    return 0;
}
时间: 2024-10-22 10:26:04

sgu-262 Symbol Recognition的相关文章

An Overview of Symbol Recognition符号识别综述

ContentsIntroduction. ....................................................................................... 524History. ........................................................................................ 524Evolution of the Research Field. ...

Handbook of Document Image Processing and Recognition文档图像处理与识别手册

编辑:David Doermann(马里兰大学)Karl Tombre(洛林大学) 前言 In the beginning, there was only OCR. After some false starts, OCR became a competitive commercial enterprise in the 1950’s. A decade later there were more than 50 manufacturers in the US alone. With the a

ios 中 使用自制framework导致 Duplicate symbol 的问题解决方法

使用第三方静态库的时候有时候要求在编译选项linker 中 other linker flag中加入 -ObjC 但如果自制的framework库工程中加入了-ObjC,在Demo工程中如果也加入-ObjC选项时,可能导致 duplicate sysbol的问题 duplicate symbol _OBJC_CLASS_$_ZHAlixPayResult in: /Users/zizhu/Library/Developer/Xcode/DerivedData/NtUniSdkHaiMaDemo-

caffe日常坑系列之:undefined reference to symbol &#39;_ZN2cv6String10deallocateEv&#39;

在使用caffe库编译C++时出现的 解决如下: /usr/bin/ld: /tmp/ccA5JGRP.o: undefined reference to symbol '_ZN2cv6String10deallocateEv'//usr/local/lib/libopencv_core.so.3.2: error adding symbols: DSO missing from command line解决:sudo apt-get autoremove libopencv-dev caffe

Symbol

ES5 的对象属性名都是字符串,这容易造成属性名的冲突.比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin 模式),新方法的名字就有可能与现有方法产生冲突.如果有一种机制,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突.这就是 ES6 引入Symbol的原因 ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值.它是 JavaScript 语言的第七种数据类型,前六种是:undefined.null.布尔值(Boolean).字符串(S

Arcgis Runtime for andriod 100 Simple marker symbol

//create a simple marker symbolSimpleMarkerSymbol symbol = new SimpleMarkerSymbol(SimpleMarkerSymbol.Style.CIRCLE, Color.RED, 12); //size 12, style of circle //add a new graphic with a new point geometryPoint graphicPoint = new Point(-226773, 6550477

《深入理解ES6》之Symbol

ES6在原有的5中原始类型:字符串.数字型.布尔型.null和undefined的基础上,引入了一种原始类型Symbol(可以通过typeof检测变量是否为Symbol类型). Symbol的使用方法 所有使用可计算属性名的地方,都可以使用Symbol. let firstName=Symbol("first name"); let person={ [firstName]:"jia" }; Object.defineProperty(person,firstNam

解决Eclipse中C++代码显示Symbol &amp;#39;std&amp;#39; could not be resolved的问题

第一次在Eclipse中写C++代码,写了一个简单的hello world程序,还没有等我编译.就报出了各种错误,但是这么简单的代码.怎么可能这么多错误.于是没有理会.编译执行后,能够正常输出!!!Hello World!!!,但是我的代码中还是有非常多红叉,把鼠标放在上面显示:Symbol 'std' could not be resolved 这种信息. 于是问题来了.怎样解决? 方法:写完库函数以后立刻保存.这样写之后的代码就不会报错了 比如:-->首先写#include <iostre

Centos下Apache遇到/usr/lib64/libnsssysinit.so: undefined symbol: PR_GetEnvSecure错误

错误详情: /usr/local/apache/bin/httpd: symbol lookup error: /usr/lib64/libnsssysinit.so: undefined symbol: PR_GetEnvSecure 错误产生原因: Centos官方发布了一个新版本的NSS包,如果进行更新就会产生这样的错误 解决方法: 重启Apache(开启了php-fpm也需要重启) 参考文章:Httpd - Symbol Lookup Errors