Submission #1248376

#TimeUsernameProblemLanguageResultExecution timeMemory
1248376clementineDango Maker (JOI18_dango_maker)C++20
100 / 100
526 ms141596 KiB
#include<bits/stdc++.h> using namespace std; typedef long long ll; int grid[3003][3003]; int dp[3003][3003][3]; int main() { int n, m; cin >> n >> m; for(int i = 0; i <=3002; i ++) { for(int j = 0; j <= 3002;j++) { grid[i][j] = -1; dp[i][j][0] = dp[i][j][1] = dp[i][j][2] = 0; } } for(int i = 1; i <=n; i ++) { for(int j = 1; j <=m; j ++) { char t; cin >> t; if(t == 'R') { grid[i][j] = 0; } else { t == 'G' ? grid[i][j] = 1 : grid[i][j] = 2; } //cout << grid[i][j]; }//cout << '\n'; } for(int i = 2; i <= (n + m); i ++) { for(int j = max(i-n, 1); j <= min(i - 1, m); j ++) { //cout << grid[i-j][j]; //we loop at dp[i - j][j][ 0 == vertical, 1 = horiz, 2 = no dango] // if we don't make a dango with this block dp[i-j][j][2] = max(max(dp[i-j + 1][j - 1][0], dp[i-j + 1][j - 1][1]) , dp[i-j + 1][j - 1][2]); //cout << " dp[2] : " << dp[i-j][j][2] << '\n'; if(grid[i-j][j] == 1) { if(grid[i-j-1][j] == 0 && grid[i-j+1][j] == 2) { dp[i-j][j][0] = max(dp[i-j + 1][j-1][0], dp[i-j + 1][j-1][2]) + 1; //cout << " dp[0] : " << dp[i-j][j][0] << '\n'; } if(grid[i-j][j-1] == 0 && grid[i-j][j + 1] == 2) { dp[i-j][j][1] = max(dp[i-j + 1][j-1][1], dp[i-j + 1][j-1][2]) + 1; //cout << " dp[1] : " << dp[i-j][j][1] << '\n'; } } } //cout << '\n'; } ll ans = 0; for(int i = 1; i <=m; i ++) { ans += max(max(dp[1][i][0], dp[1][i][1]) , dp[1][i][2]); } for(int i = 2; i <=n; i ++) { ans += max(max(dp[i][m][0], dp[i][m][1]) , dp[i][m][2]); } cout << ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...