• P2040打开所有的灯


    例如

    0  1  1
    1  0  0
    1  0  1

    点一下最中间的灯【2,2】就变成了

    0  0  1
    0  1  1
    1  1  1

    再点一下左上角的灯【1,1】就变成了

    1  1  1
    1  1  1
    1  1  1

    达成目标。最少需要2步。

    输出2即可。

    输入输出格式

    输入格式:

    九个数字,3*3的格式输入,每两个数字中间只有一个空格,表示灯初始的开关状态。(0表示关,1表示开)

    输出格式:

    1个整数,表示最少打开所有灯所需要的步数。

    输入输出样例

    输入样例#1: 复制
    0 1 1
    1 0 0
    1 0 1
    输出样例#1: 复制
    2
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int a[3] [3];
     4 int b[3][3];
     5 int ans=999999;
     6 int main(){
     7     for(int i=0;i<3;i++){
     8         for(int j=0;j<3;j++){
     9             cin>>a[i][j];
    10         }
    11     }
    12     for(int x=0;x<(1<<9);x++){//枚举所有情况 
    13         int cnt=0;
    14         memset(b,0,sizeof(b));
    15         for(int i=0;i<9;i++){
    16             if((x>>i)&1==1){//枚举所有可以改变的地方
    17                 cnt++;
    18                 int p=i%3,q=i/3;
    19                 b[p][q]^=1;
    20                 if(p!=0)b[p-1][q]^=1;
    21                 if(p!=2)b[p+1][q]^=1;
    22                 if(q!=0)b[p][q-1]^=1;
    23                 if(q!=2)b[p][q+1]^=1;
    24             }
    25         }
    26         bool ok=true;
    27         for(int i=0;i<3;i++){//比对改变之后是否可行
    28             for(int j=0;j<3;j++){
    29                 if((a[i][j]^b[i][j])==0){
    30                     ok=false;
    31                 }
    32             }
    33         }
    34         if(ok==true){
    35             ans=min(ans,cnt);
    36         }
    37     }
    38     cout<<ans;
    39 }
  • 相关阅读:
    快速幂(Fast Pow)
    半小时写完替罪羊重构点分树做动态动态点分治之紫荆花之恋的wyy贴心指导
    POJ2942 UVA1364 Knights of the Round Table 圆桌骑士
    二分图判定
    Tarjan求点双连通分量
    POJ1523 SPF 单点故障
    OI比赛常数优化
    Tarjan求割点
    NOIP2015 D1T1 神奇的幻方
    NOIP2016 D2T2 蚯蚓
  • 原文地址:https://www.cnblogs.com/1129-tangqiyuan/p/10360322.html
Copyright © 2020-2023  润新知