51Nod 1316 回文矩陣

2021-07-22 09:11:05 字數 1464 閱讀 6985

acm模版

這道題搞得我挺焦慮的,矩陣不大,可以暴力列舉。

列舉所有的組合,然後在這些組合內部,先固定選取的行,然後遍歷列,保證遍歷完後,選取的行都是回文的;然後再固定選取的列,接著遍歷行,保證遍歷完後,選取的列都是回文的;每種組合得到乙個需要改動的次數,從所有結果中選取最優的即可。

#include 

#include

#define pinf 0x3f3f3f3f

#define ninf -pinf

#define max(x, y) ((x) > (y) ? (x) : (y))

#define min(x, y) ((x) < (y) ? (x) : (y))

#define for(i, f, e) for (int i = f; i < e; i++)

using

namespace

std;

typedef

long

long ll;

const

int maxn = 9;

int matrix[maxn][maxn];

int tmp[maxn][maxn];

void next(int &x)

else

return ;

}int main()

for(j, 0, m)

}// 初始狀態11111111(row=8)

int chooserow = ~(-1

<< row);do}

for(i, 0, m)

}// 固定行查詢列(結束後保證行是回文的)

for(i, 0, row)

else

}// 第j列被選取

else

if (choosecolum & 1

<< j)

else

}// 第instead列被選取

else

if (choosecolum & 1

<< instead)

else

}// 都沒有被選取

else}}

}// 固定列查詢行(結束後保證列是回文的)

for(i, 0, colum)}}

if (res < ans)

next(choosecolum); // 下乙個狀態

} while (choosecolum < 1

<< m);

next(chooserow); // 下乙個狀態

} while (chooserow < 1

<< n);

printf("%d", ans);

return

0;}

51nod 1316 回文矩陣

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

51NOD 1316 回文矩陣 列舉

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...

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

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