程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> sgu-262 Symbol Recognition

sgu-262 Symbol Recognition

編輯:C++入門知識

sgu-262 Symbol Recognition


題目大意:

KN?M01矩陣(1<=N,M<=10,2<=K<=6),保證兩兩不同,然後要你從N?M矩陣中選出最少的位置,使得僅靠這些位置就能區分這K個矩陣。


解題思路:

我們觀察到K的范圍,發現如果我們將所有矩陣兩兩是否可以區分的信息存儲下來需要的空間是2K?(K?1)2,是可以承受的,然後我們逐格dpF[i][j][G]表示考慮到了第(i,j)並且區分狀態是G時所需的最小的選取數,然後我們可以預處理出對於選取(i,j)可以區分那幾對矩陣。
所以最後的答案就是F[N][M][2K?(K?1)2?1]


AC代碼:

#include 
#include 
#include 
#include 
#include 
#include 

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=0;p--)
            {
                if(change[i][j]==0) continue;
                if(F[p]+1

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved