Submission #388168

#TimeUsernameProblemLanguageResultExecution timeMemory
388168blueDango Maker (JOI18_dango_maker)C++17
33 / 100
808 ms88368 KiB
#include <iostream> using namespace std; int dpV[3000][3000]; int dpH[3000][3000]; char grid[3000][3000]; int N, M; bool vert(int i, int j) { if(i == 0 || i == N-1) return 0; if(grid[i-1][j] != 'R') return 0; if(grid[i][j] != 'G') return 0; if(grid[i+1][j] != 'W') return 0; return 1; } bool horiz(int i, int j) { if(j == 0 || j == M-1) return 0; if(grid[i][j-1] != 'R') return 0; if(grid[i][j] != 'G') return 0; if(grid[i][j+1] != 'W') return 0; return 1; } int main() { cin >> N >> M; for(int i = 0; i < N; i++) for(int j = 0; j < M; j++) cin >> grid[i][j]; int res = 0; for(int I = 0; I < N; I++) { dpH[I][0] = 0; dpV[I][0] = vert(I, 0); for(int s = 0; I-s >= 0 && s < M; s++) { int i = I-s; int j = s; dpH[i][j] = max(dpH[i+1][j-1], dpV[i+1][j-1]); dpH[i][j] = max(dpH[i][j], dpH[i+1][j-1] + horiz(i, j)); dpV[i][j] = max(dpH[i+1][j-1], dpV[i+1][j-1]); dpV[i][j] = max(dpV[i][j], dpV[i+1][j-1] + vert(i, j)); } } for(int J = 0; J < M; J++) { dpV[N-1][J] = 0; dpH[N-1][J] = horiz(N-1, J); for(int s = 0; N-1-s >= 0 && J+s < M; s++) { int i = N-1-s; int j = J+s; dpH[i][j] = max(dpH[i+1][j-1], dpV[i+1][j-1]); dpH[i][j] = max(dpH[i][j], dpH[i+1][j-1] + horiz(i, j)); dpV[i][j] = max(dpH[i+1][j-1], dpV[i+1][j-1]); dpV[i][j] = max(dpV[i][j], dpV[i+1][j-1] + vert(i, j)); } } for(int j = 0; j < M; j++) res += max(dpV[0][j], dpH[0][j]); for(int i = 1; i < N; i++) res += max(dpV[i][M-1], dpH[i][M-1]); cout << res << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...