51NOD 1316 回文矩陣 列舉

2021-08-02 13:15:07 字數 2052 閱讀 2277

1316 回文矩陣

基準時間限制:1 秒 空間限制:131072 kb 分值:

40 難度:4級演算法題 收藏 關注

乙個n*m的矩陣a完全由0與1兩個數字組成(0

8),矩陣第i行第j列上的項為a[i][j],i與j從0標起,即0

<=i0

<=j1)將矩陣中的任一項a[i][j]改為數字1;

(2)將矩陣中的任一項a[i][j]改為數字0;

現在給出初始的矩陣a,要求經過最少次操作,使矩陣a中至少有rowcount行是回文的,同時存在至少columcount列是回文的。輸出這個最少操作的次數。

矩陣中第r行是回文的,指序列回文,即所有的 i 有a[r][i]=a[r][m-1-i];

矩陣中第c列是回文的,指序列回文,即所有的 i 有a[i][c]=a[n-1-i][c].

例如4x4的矩陣如下:

0000

1000

1100

1110

要求rowcount = 2,且columcount = 2.

可以將a[3][0]改為0,使第0行與第3行回文,同時第0列與第3列回文。變化後如下:

0000

1000

1100

0110

input

第一行兩個正整數,表示rowcount,columcount,且0

<=rowcount<=n,0

<=columcount<=m.

第二行乙個整數n,即矩陣的行數,1

<=n<=8.

之後有n行,每行乙個由m個『0』、『1』字元構成的字串,表示n*m矩陣的資訊。

output

乙個整數,表示最少操作的次數。

input示例22

40000

1000

1100

1110

output示例

1孔炤 (題目提供者)

列舉出是回文的r行和c列

確定a[i][j],如果i行是回文 a[i][m-j-1]=a[i][j]

j列是回文 a[n-i-1][j]=a[i][j]

n-i-1行是回文 a[n-i-1][m-j-1]=a[i][j]…

遍歷i,j 選出a[i][j]能確定的位置,並確定最小需要多少次改變操作即可o(

crn∗

ccm∗

n∗m)

#include

#include

#define ll long long

#define pii pair

#define mem(a,x) memset(a,x,sizeof(a))

using

namespace

std;

const

int inf=1e9+7;

char str[8][9];

bool vis[8][8];

int n,m;

vector

vec;

inline

int bits(int x)

return ans;

}int f(int i,int j,int x,int y));

int ii=n-i-1,jj=m-j-1;

bool flag=false;

if((1}}

if((1

ans=min(ans,sum);

}for(int z=0;zint i=vec[z].first,j=vec[z].second;

vis[i][j]=true;

}return ans;

}int check(int x,int y)

ans+=f(i,j,x,y);}}

return ans;

}int slove(int r,int c)}}

}return ans;

}int main()

m=strlen(str[0]);

printf("%d\n",slove(r,c));

}return

0;}

51nod 1316 回文矩陣 (列舉 判斷)

思路 因為n 和m 並不會很大,所以就直接列舉 r c 的所有情況,然後將這些情況的結果算出來就可以。列舉每個點對應的四個點是否被選中就可以。這裡有幾種情況 includeusing namespace std const int inf 0x3f3f3f const int n 10 int a ...

51Nod 1316 回文矩陣

acm模版 這道題搞得我挺焦慮的,矩陣不大,可以暴力列舉。列舉所有的組合,然後在這些組合內部,先固定選取的行,然後遍歷列,保證遍歷完後,選取的行都是回文的 然後再固定選取的列,接著遍歷行,保證遍歷完後,選取的列都是回文的 每種組合得到乙個需要改動的次數,從所有結果中選取最優的即可。include i...

51nod 1316 回文矩陣

思路 預處理出所有的行和列分別為row,col的情況,再遍歷所有情況,之中遍歷矩陣a i j 對於行i,列j是否選取分情況討論 一,行i,列j都選取。對於上圖,行0和列0被選中,此時改變s 0 0 受影響的有s 0 3 s 3 0 因此需要對這三個值進行判斷取最小改變值,此外還有另一種情況,當行3或...