回文矩阵 51Nod - 1316

https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1316

数据量很小 可以先暴力枚举出r行c列 然后求出使当前这r行c列回文的代价 取个最小值即可

对于(i,j)这个位置 (i,m-j-1) (n-i-1,j) (n-i-1,m-j-1)这三个位置只要出现在了r行c列里 就必须和(i,j)一致 并且和其他位置无关 先扫一遍矩阵 并查集处理出所有这些集合 对每个集合看0多还是1多

智障啊 以为是n*n的矩阵 WA到死

#include 
using namespace std;
const int N=0x3f3f3f3f;

int flagr[10][10],flagc[10][10];
int row[10],col[10],f[100],cnt0[100],cnt1[100];
int r,c,n,m,ans;
char ch[10][10];

int getf(int p)
{
    if(f[p]==p) return p;
    else return f[p]=getf(f[p]);
}

void unite(int u,int v)
{
    int fu,fv;
    fu=getf(u),fv=getf(v);
    if(fu!=fv)
    {
        f[fv]=fu;
        cnt0[fu]+=cnt0[fv];
        cnt1[fu]+=cnt1[fv];
    }
}

int id(int i,int j)
{
    return i*m+j;
}

void solve()
{
    int i,j,sum,v0,v1;

    memset(flagr,0,sizeof(flagr));
    memset(flagc,0,sizeof(flagc));
    for(i=0;i

 

你可能感兴趣的:(思维)