51nod 1316 回文矩陣

2021-08-22 08:36:05 字數 1189 閱讀 5299

思路:預處理出所有的行和列分別為row,col的情況,再遍歷所有情況,之中遍歷矩陣a[i][j],對於行i,列j是否選取分情況討論:

一,行i,列j都選取。對於上圖,行0和列0被選中,此時改變s[0][0],受影響的有s[0][3],s[3][0]因此需要對這三個值進行判斷取最小改變值,此外還有另一種情況,當行3或列3也是被選中的時,受影響的就還有s[3][3],這是就需要對4個值來判斷。

二,行i被選取。對於行0被選取,同樣分兩種情況:列3是否選取。即列m-j-1是否選取

三,列j被選取。分行n-i-1是否選取討論

code :

#include#include#include#includeusing namespace std;

const int max_n=10;

const int max_m=10;

int n,m,row,col;

string a[max_n],d[max_n];

vectorvr,vc;

bool br[max_m],bc[max_n];

int main()

m=a[0].size();

for(int i=0;i=1;

} if(t==row) vr.push_back(i);

} for(int i=0;i=1;

} if(t==col) vc.push_back(i);

} int ans=n*m;

for(auto r:vr)

else

a[i][j]=a[i][m-j-1]=a[n-i-1][j]=char(t+'0');

}else if(br[i])else

a[i][j]=a[i][m-j-1]=char(t+'0');

}else if(bc[j])else

a[i][j]=a[n-i-1][j]=char(t+'0'); }}

ans=min(ans,ss);

} }cout<

return 0;

}

51Nod 1316 回文矩陣

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

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