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

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

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

      【牛客小白75】D 矩陣 【bfs+優(yōu)先隊(duì)列】

      題目

      https://ac.nowcoder.com/acm/contest/60063/D

      題意是說,給你一張 \(n * m(n,m \leq 10^3)\) 大小的01地圖,當(dāng)前點(diǎn)下一步只能走到相鄰的點(diǎn)上,如果這兩個點(diǎn)值相同,則代價為2,否則代價為1,問從(1,1)走到(n,m)最少代價是多少

      思路

      首先很容易想到只往右下走是錯的,有可能往左和往上走總代價更小

      那么狀態(tài)轉(zhuǎn)移就不能兩層循環(huán)解決了,有點(diǎn)類似dp,但是實(shí)現(xiàn)需要用到bfs,bfs的依據(jù)是從當(dāng)前代價最小的狀態(tài)的點(diǎn)開始往其他地方轉(zhuǎn)移,因此使用優(yōu)先隊(duì)列

      具體來說,因?yàn)閺牡谝粋€點(diǎn)開始走的路徑上的值一定是010101...或者101010....,所以先根據(jù)從起點(diǎn)開始走到的奇數(shù)or偶數(shù)步給每個點(diǎn)一個初始的cost,再把他們修改為相應(yīng)的0或1;

      bfs的時候如果當(dāng)前的代價大于這個點(diǎn)的最小代價,就continue掉

      code

      #include<bits/stdc++.h>
      #define ll long long
      using namespace std;
      const int N = 1000 + 10;
      ll dp[N][N], a[N][N], add[N][N];
      bool vis[N][N];
      int n, m;
      int dir[4][2] = {0, 1, 0, -1, 1, 0, -1, 0};
      struct node{
          int x;
          int y;
          ll t;
          bool operator < (const node &aa) const {
              return t > aa.t;   
          }
      };
      
      void solve() {
          memset(dp, 0x3f3f3f3f, sizeof(dp));
          dp[1][1] = 0;
          priority_queue<node> q;
          q.push((node){1, 1, 0});
          while(!q.empty()) {
              node u = q.top(); q.pop();
              // cout << u.x << ' ' << u.y << ' ' << u.t << endl;   ///
              if(u.t > dp[u.x][u.y]) continue;
              for(int i = 0; i < 4; i++) {
                  int xx = u.x + dir[i][0], yy = u.y + dir[i][1];
                  if(xx < 1 || yy < 1 || xx > n || yy > m) continue;
                  if(dp[u.x][u.y] + add[xx][yy] < dp[xx][yy]) {
                      dp[xx][yy] = dp[u.x][u.y] + add[xx][yy];
                      q.push((node){xx, yy, dp[xx][yy]});
                  }
              }
          }
          return;
      }
      
      int main(){
          cin >> n >> m;
          for(int i = 1; i <= n; i++) {
              for(int j = 1; j <= m; j++) {
                  scanf("%1d", &a[i][j]);
                  if((i + j) % 2) add[i][j] = (a[i][j] == a[1][1]) + 1;
                  else add[i][j] = (a[i][j] != a[1][1]) + 1;
              }
          }
          solve();
          cout << dp[n][m] << endl;
      	return 0;
      } 
      
      
      posted @ 2023-07-01 12:34  starlightlmy  閱讀(24)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产午夜亚洲精品久久| 怀宁县| h无码精品3d动漫在线观看| 中国老熟女重囗味hdxx| 精品国产大片中文字幕| 人人爽人人澡人人人妻| 亚洲av无码精品蜜桃| 中国老熟女重囗味hdxx| 国产成人精品久久一区二区| 国产乱码1卡二卡3卡四卡5 | 2020国产欧洲精品网站| 少妇被粗大的猛进69视频| 国产中年熟女高潮大集合| 麻豆一区二区中文字幕| 肇东市| 国产日韩av二区三区| 亚洲国产亚洲综合在线尤物| 亚洲国产精品久久综合网| 国产在线观看91精品亚瑟| 亚洲AV高清一区二区三区尤物| 九九热热久久这里只有精品| 国产福利姬喷水福利在线观看| 国产福利视频区一区二区| 内射一区二区三区四区| 国产日韩精品一区二区三区在线| 自拍偷亚洲产在线观看| 久久精品无码一区二区小草| 东方av四虎在线观看| 亚洲一区二区中文av| 久久精品国产亚洲精品| 亚洲欧美日韩愉拍自拍美利坚| 视频一区二区三区四区久久| 欧美成aⅴ人高清免费| 亚洲天堂av在线免费看| 国产超高清麻豆精品传媒麻豆精品| 无码人妻熟妇av又粗又大| 日韩精品一二三黄色一级| 国产线播放免费人成视频播放 | 欧美人成精品网站播放| 国产老熟女一区二区三区| аⅴ天堂国产最新版在线中文|