제출 #1290936

#제출 시각아이디문제언어결과실행 시간메모리
1290936mhaerDango Maker (JOI18_dango_maker)C++20
33 / 100
234 ms327680 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;
#pragma GCC optimize("Ofast")

int r;
int c;

void once(vector<string>& input, vector<vector<vector<int>>>& dp, int rr, int cc) {
  int umd = 0;
  if (rr-1 >= 0 && rr+1 < r) {
    if (input[rr-1][cc] == 'W' && input[rr][cc] == 'G' && input[rr+1][cc] == 'R') {
      umd++;
    }
  }
  
  int lmr = 0;  
  if (cc-1 >= 0 && cc+1 < c) {
    if (input[rr][cc-1] == 'R' && input[rr][cc] == 'G' && input[rr][cc+1] == 'W') {
      lmr++;
    }
  }

  if (rr > 0 && cc > 0) {
    dp[rr][cc][0] = max(dp[rr-1][cc-1][0], max(dp[rr-1][cc-1][1], dp[rr-1][cc-1][2]));    
    dp[rr][cc][1] = max(dp[rr-1][cc-1][0], dp[rr-1][cc-1][1]) + umd;
    dp[rr][cc][2] = max(dp[rr-1][cc-1][0], dp[rr-1][cc-1][2]) + lmr;
  } else {
    dp[rr][cc][0] = 0;
    dp[rr][cc][1] = umd;
    dp[rr][cc][2] = lmr;
  }
}

int solve(vector<string>& grid, int rr) {
  return 1;
}

signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL); cout.tie(NULL);
    cin >> r >> c;
    vector<string> input(r);
    vector<vector<vector<int>>> dp(r, vector<vector<int>>(c, vector<int>(3, 0)));
    for (auto& i : input) cin >> i;

    for (int i = 0;i < c;i++) {
      for (int rr = 0;rr < r/2;rr++) {
        swap(input[rr][i], input[r-rr-1][i]);
      }
    }
    
    for (int rr = 0;rr < r;rr++) {
      for (int cc = 0;cc < c;cc++) {
        once(input, dp, rr, cc);
      }
    }

    int sum = 0;
    for (int cc = 0;cc < c;cc++) {
      sum += max(dp[r-1][cc][0], max(dp[r-1][cc][1], dp[r-1][cc][2]));
    }

    for (int rr = 0;rr < r-1;rr++) {
      sum += max(dp[rr][c-1][0], max(dp[rr][c-1][1], dp[rr][c-1][2]));
    }

    cout << sum << "\n";

    
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...