51nod 1316 回文矩阵

来源:互联网 发布:洛枳学姐的淘宝店 编辑:程序博客网 时间:2024/05/29 12:19
#include <bits/stdc++.h>using namespace std;char mz[10][10],tmpmz[10][10];int cal1(int x){int ret=0;while(x){if(x&1)ret++;x>>=1;}return ret;}int main(){int i,j,n,m,rowsum,colsum,rsta,csta,now,ans,flag,sum;while(cin>>rowsum>>colsum>>n){for(i=0;i<n;i++)scanf(" %s",mz[i]);m=strlen(mz[0]);ans=1<<29;for(rsta=0;rsta<(1<<n);rsta++){if(cal1(rsta)!=rowsum)continue;for(csta=0;csta<(1<<m);csta++){if(cal1(csta)!=colsum)continue;now=0;for(i=0;i<n;i++)for(j=0;j<m;j++)tmpmz[i][j]=mz[i][j];for(i=0;i<n;i++){if(!(rsta&(1<<i)))continue;for(j=0;j<m;j++){if((m&1)&&(m/2==j))continue;if((n&1)&&(n/2==i)){sum=tmpmz[i][j]+tmpmz[i][m-j-1]-2*'0';now+=min(sum,2-sum);tmpmz[i][j]=tmpmz[i][m-j-1];continue;}flag=0;if(rsta&(1<<(n-i-1)))flag++;if(csta&(1<<j))flag++;if(csta&(1<<(m-j-1)))flag++;if(flag>=2){sum=tmpmz[i][j]+tmpmz[i][m-j-1]+tmpmz[n-i-1][j]+tmpmz[n-i-1][m-j-1]-'0'*4;if(sum>=2){tmpmz[i][j]='1';tmpmz[i][m-j-1]='1';tmpmz[n-i-1][j]='1';tmpmz[n-i-1][m-j-1]='1';now+=4-sum;}else{tmpmz[i][j]='0';tmpmz[i][m-j-1]='0';tmpmz[n-i-1][j]='0';tmpmz[n-i-1][m-j-1]='0';now+=sum;}}else{if(csta&(1<<j)){sum=tmpmz[i][j]+tmpmz[i][m-j-1]+tmpmz[n-i-1][j]-'0'*3;if(sum>=2){tmpmz[i][j]='1';tmpmz[i][m-j-1]='1';tmpmz[n-i-1][j]='1';now+=3-sum;}else{tmpmz[i][j]='0';tmpmz[i][m-j-1]='0';tmpmz[n-i-1][j]='0';now+=sum;}}else if(csta&(1<<(m-j-1))){sum=tmpmz[i][j]+tmpmz[i][m-j-1]+tmpmz[n-i-1][m-j-1]-'0'*3;if(sum>=2){tmpmz[i][j]='1';tmpmz[i][m-j-1]='1';tmpmz[n-i-1][m-j-1]='1';now+=3-sum;}else{tmpmz[i][j]='0';tmpmz[i][m-j-1]='0';tmpmz[n-i-1][m-j-1]='0';now+=sum;}}else{sum=tmpmz[i][j]+tmpmz[i][m-j-1]-2*'0';now+=min(sum,2-sum);tmpmz[i][j]=tmpmz[i][m-j-1];}}}}for(j=0;j<m;j++){if(!(csta&(1<<j)))continue;for(i=0;i<n;i++){if(tmpmz[i][j]!=tmpmz[n-i-1][j]){tmpmz[i][j]=tmpmz[n-i-1][j];now++;}}}ans=min(ans,now);}} printf("%d\n",ans);}}

0 0