Submission #770271

#TimeUsernameProblemLanguageResultExecution timeMemory
770271gun_ganDango Maker (JOI18_dango_maker)C++17
13 / 100
2067 ms33264 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const int MX = 10;
vector<vector<bool>> vis;
string s[MX];

int N, M;

map<vector<vector<bool>> , int > memo;

int f() {
      if(memo.count(vis)) return memo[vis];

      int res = 0;
      for(int i = 0; i < N; i++) {
            for(int j = 0; j + 2 < M; j++) {
                  if(!vis[i][j] && !vis[i][j + 1] && !vis[i][j + 2] 
                        && s[i][j] == 'R' && s[i][j + 1] == 'G' && s[i][j + 2] == 'W') {
                        vis[i][j] = vis[i][j + 1] = vis[i][j + 2] = 1;
                        res = max(res, f() + 1);
                        vis[i][j] = vis[i][j + 1] = vis[i][j + 2] = 0;
                  }
            }
      }
      for(int j = 0; j < M; j++) {
            for(int i = 0; i + 2 < N; i++) {
                  if(!vis[i][j] && !vis[i + 1][j] && !vis[i + 2][j]
                        && s[i][j] == 'R' && s[i + 1][j] == 'G' && s[i + 2][j] == 'W') {
                        vis[i][j] = vis[i + 1][j] = vis[i + 2][j] = 1;
                        res = max(res, f() + 1);
                        vis[i][j] = vis[i + 1][j] = vis[i + 2][j] = 0;
                  }
            }
      }

      return memo[vis] = res;
}

int main() {
      cin.tie(0); ios_base::sync_with_stdio(0);

      cin >> N >> M;

      vis = vector<vector<bool>> (N, vector<bool>(M));

      for(int i = 0; i < N; i++) cin >> s[i];

      cout << f() << '\n';
      
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...