zoukankan      html  css  js  c++  java
  • 费解的开关

    由题可得:

    1.每个等最多点一次

    2.当第一行固定,最多由一种结果,每一行的状态,要由下一行转换过来。所以枚举第一行的状态,来计算答案

    #include <iostream>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    
    char g[10][10];
    int dx[5] = {0,0,0,-1,1};
    int dy[5] = {1,-1,0,0,0};
    void turn(int x, int y){
        for(int i = 0; i < 5; ++ i)
        {
            int a = x + dx[i], b = y + dy[i];
            if(a < 0 || b < 0 || a >= 5 || b >= 5)continue;
            g[a][b] ^= 1;
        }
    }
    int work(){
        int ans = 1e7 ;
        
        char backup[10][10];
        memcpy(backup, g, sizeof g);
        for(int i = 0; i < 1 << 5; ++ i){
            int res = 0;
            for(int j = 0; j < 5; ++ j)
                if(i >> j & 1)
                turn(0,j), res ++;
            
            for(int j = 0; j < 4; ++ j)
                for(int k = 0; k < 5; ++ k)
                    if(g[j][k] == '0'){
                        turn(j+1, k);
                        res++;
                    }
                
            bool flag = 1;
            for(int j = 0; j < 5; ++ j)if(g[4][j] == '0'){
                flag = 0;
                break;
            }
            if(flag) ans = min(ans, res);
            memcpy(g,backup,sizeof backup);
        
        }
        if(ans > 6) ans = -1;
        return ans;
    }
    
    int main(){
        int n;
        cin >> n;
        while(n--){
            for(int i = 0; i < 5; ++ i) cin >> g[i];
            cout << work() << endl;
        }
        return 0;
    }
    追求吾之所爱
  • 相关阅读:
    IAccessible ( 一 )
    object sender,EventArgs e的一些讲解
    C# 操作符重载
    MSAA简介
    小试NArrange
    C++宏
    Ext.form.ComboBox简单用法
    SQL SERVER 收缩数据库的命令
    ext.grid的配置属性和方法
    磁盘阵列
  • 原文地址:https://www.cnblogs.com/rstz/p/14391046.html
Copyright © 2011-2022 走看看