zoukankan      html  css  js  c++  java
  • uvalive 11464

    题意:怎么使最少的0变成1让原矩阵的每个数的上下左右之和为偶数

    思路:枚举第一行就可以确定所有的状态

      1 package text;
      2 
      3 import java.awt.List;
      4 import java.io.BufferedReader;
      5 import java.io.IOException;
      6 import java.io.InputStream;
      7 import java.io.InputStreamReader;
      8 import java.io.PrintWriter;
      9 import java.math.BigDecimal;
     10 import java.math.BigInteger;
     11 import java.util.Map;
     12 import java.util.Scanner;
     13 import java.util.StringTokenizer;
     14 
     15 public class Main {
     16     public static void main(String[] args) throws IOException {
     17         InputReader cin = new InputReader(System.in);
     18         int t;
     19         int n;
     20         int cube[][] = new int[50][50];
     21         int now[][] = new int[50][50];
     22         t = cin.nextInt();
     23         for(int p = 1;p<=t;p++){
     24             int ans = -1;
     25             n = cin.nextInt();
     26             for(int i = 1;i<=n;i++)
     27                 for(int j = 1;j<=n;j++)
     28                     cube[i][j] = cin.nextInt();
     29             for(int i = 0;i<1<<n;i++) {
     30                 int tmp = i;
     31                 int tmpans = 0;
     32                 for(int j = 1;j<=n;j++) {
     33                     now[1][j] = tmp&1;
     34                     tmp/=2;
     35                 }
     36                 boolean flag = true;
     37                 for(int j = 1;j<=n;j++)
     38                     if(cube[1][j]==0&&now[1][j]==1)
     39                         tmpans++;
     40                     else if(cube[1][j]==1&&now[1][j]==0)
     41                         flag = false;
     42                 for(int j = 2;j<=n;j++)
     43                     for(int k = 1;k<=n;k++)
     44                             now[j][k] = 0;
     45                 for(int j = 2;j<=n;j++) {
     46                     for(int k = 1;k<=n;k++) {
     47                         int s = 0,nowj = j-1;
     48                         if(nowj>=2) s+=now[nowj-1][k];
     49                         if(k>=2) s+=now[nowj][k-1];
     50                         if(k<n) s+=now[nowj][k+1];
     51                         now[j][k] = s%2;
     52                         if(now[j][k]==0&&cube[j][k]==1) {
     53                             flag = false;
     54                             break;
     55                         }
     56                         if(now[j][k]==1&&cube[j][k]==0)
     57                             tmpans++;
     58                     }
     59                     if(!flag)
     60                         break;
     61                 }
     62                 if(flag&&(tmpans<ans||ans==-1))
     63                     ans = tmpans;
     64             }
     65             if(ans==-1)
     66                 System.out.printf("Case %d: -1
    ",p);
     67             else 
     68                 System.out.printf("Case %d: %d
    ",p,ans);
     69         }
     70     }
     71 }
     72 class InputReader {      
     73     public BufferedReader reader;      
     74     public StringTokenizer tokenizer;      
     75       
     76     public InputReader(InputStream stream) {      
     77         reader = new BufferedReader(new InputStreamReader(stream), 32768);      
     78         tokenizer = new StringTokenizer("");      
     79     }      
     80     
     81     
     82     private void eat(String s) {      
     83         tokenizer = new StringTokenizer(s);      
     84     }      
     85       
     86     public String nextLine() {       
     87         try {      
     88             return reader.readLine();      
     89         } catch (Exception e) {      
     90             return null;      
     91         }      
     92     }      
     93       
     94     public boolean hasNext() {      
     95         while (!tokenizer.hasMoreTokens()) {      
     96             String s = nextLine();      
     97             if (s == null)      
     98                 return false;      
     99             eat(s);      
    100         }      
    101         return true;      
    102     }      
    103       
    104     public String next() {      
    105         hasNext();      
    106         return tokenizer.nextToken();      
    107     }      
    108       
    109     public int nextInt() {      
    110         return Integer.parseInt(next());      
    111     }      
    112       
    113     public int[] nextInts(int n) {      
    114         int[] nums = new int[n];      
    115         for (int i = 0; i < n; i++) {      
    116             nums[i] = nextInt();      
    117         }      
    118         return nums;      
    119     }      
    120       
    121     public long nextLong() {      
    122         return Long.parseLong(next());      
    123     }      
    124       
    125     public double nextDouble() {      
    126         return Double.parseDouble(next());      
    127     }      
    128       
    129     public BigInteger nextBigInteger() {      
    130         return new BigInteger(next());      
    131     }      
    132 }      
  • 相关阅读:
    codeblocks 缺少dll libstdc++-6.dll and so on
    gtx 1650 inspiron 1501 pytouch env
    python串口通信
    devops tools
    mosquitto 消息持久化到file
    Mybatis mapper动态代理的原理详解(转)
    Java @Repeatable(转)
    Linux进阶教程丨第10章:管理网络
    CTF-Pwn丨栈溢出入门题目思路解析
    白帽专访丨月神:我的The loner安全团队
  • 原文地址:https://www.cnblogs.com/Tree-dream/p/7603353.html
Copyright © 2011-2022 走看看