码迷,mamicode.com
首页 > 其他好文 > 详细

D - Fliptile

时间:2018-02-22 19:22:46      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:gpo   sum   oid   for   order   contain   scrolling   ram   frame   

思路:确定第一行,其他的也就逐步确定了。
#include<cstdio>  
#include<cstring>  
#include<iostream>  
#include<algorithm>  
using namespace std;  
int n,m;
int minn=1000000009; 
int f[1001][1001],ans[1001][1001],cz[1001][1001],a[1001][1001];

void dfs(int lie){  
    if(lie>m){
        for(int i=1;i<=n;i++)  
            for(int j=1;j<=m;j++)  cz[i][j]=a[i][j];
        for(int i=1;i<=m;i++)  
            if(f[1][i]){  
                cz[1][i]^=1;cz[2][i]^=1;  
                cz[1][i+1]^=1;cz[1][i-1]^=1;  
            }  
        for(int i=2;i<=n;i++)  
            for(int j=1;j<=m;j++){  
                if(cz[i-1][j]==1){  
                    f[i][j]=1;cz[i][j]^=1;  
                       cz[i][j+1]^=1;cz[i][j-1]^=1;  
                    cz[i+1][j]^=1;cz[i-1][j]^=1;
                }  
                else f[i][j]=0;
            }  
        bool pd=false;
        for(int i=1;i<=n;i++)  
            for(int j=1;j<=m;j++)  
                if(cz[i][j]){
                    pd=true;  
                    break;  
                }
        if(!pd){
            int sum=0;
            for(int i=1;i<=n;i++)
                for(int j=1;j<=m;j++)
                    if(f[i][j])    sum++;
            if(sum>=minn) return;
            minn=sum;
            for(int i=1;i<=n;i++)
                for(int j=1;j<=m;j++) 
                    ans[i][j]=f[i][j];
        }
        return;
    }
    for(int i=0;i<=1;i++){  
        f[1][lie]=i;
        dfs(lie+1);
    }  
}
int main(){  
    scanf("%d%d",&n,&m);  
    for(int i=1;i<=n;i++)  
        for(int j=1;j<=m;j++)  
            cin>>a[i][j];
    dfs(1);
    if(minn==1000000009){
        cout<<"IMPOSSIBLE";
        return 0;
    }
    for(int i=1;i<=n;i++){  
        for(int j=1;j<=m;j++)  
            cout<<ans[i][j]<<" ";  
        cout<<endl;
    }    
}
/*
4 4
1 0 0 1
0 1 1 0
0 1 1 0
1 0 0 1
*/

 

D - Fliptile

标签:gpo   sum   oid   for   order   contain   scrolling   ram   frame   

原文地址:https://www.cnblogs.com/cangT-Tlan/p/8459635.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!