danielvitor23

ABC Path

Apr 13th, 2023
860
1
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.49 KB | Source Code | 1 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int MAXN = 55;
  5.  
  6. int dx[] = {-1, 0, 1, -1, 1, -1, 0, 1};
  7. int dy[] = {-1, -1, -1, 0, 0, 1, 1, 1};
  8.  
  9. int h, w, ans;
  10. char gr[MAXN][MAXN];
  11.  
  12. int timer = 1;
  13. int dp[MAXN][MAXN][26];
  14. int solved[MAXN][MAXN][26];
  15.  
  16. int solve(int i, int j, int d, char c = 'A') {
  17.         if (solved[i][j][d] == timer) return dp[i][j][d];
  18.         int maxD = d;
  19.         for (int k = 0; k < 8; ++k) {
  20.                 int ii = i + dx[k];
  21.                 int jj = j + dy[k];
  22.                 if (ii < 0 or jj < 0 or h <= ii or w <= jj or gr[ii][jj] != c+1) continue;
  23.                 maxD = max(maxD, solve(ii, jj, d+1, gr[ii][jj]));
  24.         }
  25.         solved[i][j][d] = timer;
  26.         return dp[i][j][d] = maxD;
  27. }
  28.  
  29. int main() {
  30.         cin.tie(0)->sync_with_stdio(0);
  31.  
  32.         int tc = 1;
  33.         while (cin >> h >> w and h) {
  34.                 for (int i = 0; i < h; ++i) {
  35.                         for (int j = 0; j < w; ++j) {
  36.                                 cin >> gr[i][j];
  37.                         }
  38.                 }
  39.  
  40.                 ++timer;
  41.                 ans = 0;
  42.                 for (int i = 0; i < h; ++i) {
  43.                         for (int j = 0; j < w; ++j) {
  44.                                 if (gr[i][j] == 'A') {
  45.                                         ans = max(ans, solve(i, j, 1, 'A'));
  46.                                 }
  47.                         }
  48.                 }
  49.                 cout << "Case " << tc++ << ": " << ans << '\n';
  50.  
  51.         }
  52.  
  53. }
Advertisement
Add Comment
Please, Sign In to add comment