<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      挑戰程序設計競賽 2章習題 Aizu - 0525 Osenbei BFS

      地址 https://vjudge.net/problem/Aizu-0525

      
      

      IOI 糖果公司使用自公司成立以來一直沿用的傳統方法烘烤米果。 這種傳統方法是將米果的正面用炭火烘烤一段時間,正面烤好后將其翻面,再將背面用炭火烘烤一段時間。 在保持這一傳統的同時,米果是用機器烘烤的。 機器烘烤的米果呈長方形,縱行為 R(1≤R≤10),橫列為 C(1≤C≤10000)。

      正常情況下,機器自動運行,當正面烘烤完成后,機器同時將米果翻轉過來,烘烤背面。
      有一天,在烘烤米餅時,就在米餅翻面之前發生了地震,導致部分米餅被翻面。

      幸運的是,炭火依然完好,但如果再烘烤正面,烘烤時間就會超過公司成立以來的傳統規定,米果的正面就會燒焦,無法作為產品出廠。

      因此,匆忙將機器改為手動操作,只翻轉尚未翻轉的米果。 該機器可以同時翻轉橫排和豎列,但遺憾的是,它不能逐個翻轉米果。
      如果翻轉米果的時間過長,地震時未翻轉的米果正面就會過熟,無法作為產品出廠。

      橫排也要翻面一次。 還要考慮沒有橫行被翻轉或沒有豎列被翻轉的情況。 請編寫一個程序,輸出可裝運的米果的最大數量。
      假設地震發生后,米果立即處于下圖所示的狀態。 黑圈表示正面燒焦,白圈表示背面燒焦。

      
      多組數據 以輸入 0 0 結束
      1 ≤ R ≤ 10, 1 ≤ C ≤ 10 000
      入力例
      2 5
      0 1 0 1 0
      1 0 0 0 1
      3 6
      1 0 0 0 1 0
      1 1 1 0 1 0
      1 0 1 1 0 1  
      0 0
      出力例
      9
      15

      解答

       

      查看數據范圍

      以每行是否翻轉作為狀態,那么一共有210狀態就是1024個

      每列是否翻轉取決于每列上0多還是1多

      所以我們遍歷每行是否翻轉的狀態, 然后按照每列最多的0或者1的數目累加 就是能夠得到的最多0的數目

      使用位運算記錄每行是否已經翻轉  

      // 112355555.cpp : 此文件包含 "main" 函數。程序執行將在此處開始并結束。
      //
      
      #include <iostream>
      #include <unordered_set>
      #include <algorithm>
      
      using namespace std;
      
      
      /*
      入力例
      2 5
      0 1 0 1 0
      1 0 0 0 1
      3 6
      1 0 0 0 1 0
      1 1 1 0 1 0
      1 0 1 1 0 1
      0 0
      出力例
      9
      15
      
      //==============
      3 22
      1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
      1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
      1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
      3 22
      1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
      1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
      1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
      3 22
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
      1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
      3 22
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      1 1 1 1 1 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1
      1 1 1 1 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1
      3 22
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1
      1 1 1 1 1 0 1 1 1 1 1 0 1 0 1 0 1 1 1 1 1 1
      9 22
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1
      1 1 1 1 1 0 1 1 1 1 1 0 1 0 1 0 1 1 1 1 1 1
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1
      1 1 1 1 1 0 1 1 1 1 1 0 1 0 1 0 1 1 1 1 1 1
      0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1
      1 1 1 1 1 0 1 1 1 1 1 0 1 0 1 0 1 1 1 1 1 1
      0 0
      */
      
      const int N = 100010;
      int arr[20][N];
      
      int c, r;
      int ans = 0;
      
      unordered_set<int> ss;
      
      //第i行翻轉1次
      void Reverse(int idx) {
          for (int i = 0; i < r; i++) {
              arr[idx][i] ^= 1;
          }
      }
      
      int calc()
      {
          int sum = 0;
          //逐列計算0 1的個數 取個數多的加上
          for (int i = 0; i < r; i++) {
              int One_Count = 0; int Zero_Count = 0;
              for (int j = 0; j < c; j++) {
                  if (arr[j][i] == 1) One_Count++;
                  else Zero_Count++;
              }
              sum += max(One_Count, Zero_Count);
          }
      
          return sum;
      }
      
      
      void dfs(int reverIdx)
      {
          ans = max(ans, calc());
      
          for (int i = 0; i < c; i++) {
              int tmp = reverIdx ^ (1 << i);
              if (ss.count(tmp) == 0) {
                  ss.insert(tmp);
                  //沒嘗試過的都 進行計算
                  Reverse(i);
                  //計算得到最多的0
                  ans = max(ans, calc());
                  dfs(tmp);
                  Reverse(i);
              }
          }
      }
      
      
      int main()
      {
          while (1) {
              cin >> c >> r;
              ans = 0; ss.clear();
              if (c == 0 && r == 0) break;
      
              for (int i = 0; i < c; i++) {
                  for (int j = 0; j < r; j++) {
                      cin >> arr[i][j];
                  }
              }
      
              dfs(0);
              cout << ans << endl;
          }
      
          return 0;
      }

       

       

      
      

      #include <iostream>

      
      

      using namespace std;


      int
      r, c; int gra[15][10010]; int ans = -1; void flip(int row) { for (int j = 0; j < c; j++) { gra[row][j] ^= 1;} } void reflip(int row) { flip(row); } void Check() { int sum = 0; for (int i = 0; i < c; i++) { int a = 0; int b = 0; for (int j = 0; j < r; j++) { if (gra[j][i] == 1) {a++;} else {b++;} } sum += max(a, b); } ans = max(sum, ans); } void dfs(int curr) { if (curr >= r) { //檢驗當前的 Check(); return; } //當前 選擇或者不選擇 flip(curr); dfs(curr + 1); reflip(curr); dfs(curr+1); return; } void solve() { ans = -1; dfs(0); cout << ans << endl; return ; } int main() { while (cin >> r >> c) { if (r == 0 && c == 0) break; for (int i = 0; i < r; i++) { for (int j = 0; j < c; j++) { cin >> gra[i][j]; } } solve(); } return 0; }

       

      posted on 2021-03-20 17:54  itdef  閱讀(97)  評論(0)    收藏  舉報

      導航

      主站蜘蛛池模板: 在线成人| 成人性生交大片免费看| 色九九视频| 最新的精品亚洲一区二区| 国产无码高清视频不卡| 国精品91人妻无码一区二区三区| 欧洲亚洲国内老熟女超碰| 电影在线观看+伦理片| 天堂v亚洲国产v第一次| 日韩无人区码卡1卡2卡| 激情综合五月网| 日日猛噜噜狠狠扒开双腿小说| 国产成人高清亚洲一区二区| 超碰伊人久久大香线蕉综合| 一本久道中文无码字幕av| 精品日本乱一区二区三区| 国产成年码av片在线观看| 极品无码国模国产在线观看| 一区二区三区四区黄色网| 中文字幕日韩精品一区二区三区| 成人无码视频| 国产一区二区三区av在线无码观看 | 国产精品自在拍首页视频8| 极品蜜桃臀一区二区av| 亚洲中文字幕无码专区| 伊人久久大香线蕉av色婷婷色 | 综合偷自拍亚洲乱中文字幕| 四虎成人精品永久免费av| 午夜在线观看成人av| 未满十八18禁止免费无码网站| 日韩深夜福利视频在线观看| 国产又黄又爽又刺激的免费网址| 利辛县| 人人妻人人狠人人爽| 日本高清www无色夜在线视频| 操操操综合网| 在线免费成人亚洲av| 国产一区| 日本在线视频网站www色下载| 日韩少妇人妻vs中文字幕| 免费无码又爽又刺激成人|