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