#pragma GCC optimize ("Ofast")
#pragma GCC optimize ("unroll-loops")
#include <iostream>
using namespace std;
string stage[3005];
int dp[6005][3050][3];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int n, m;;
cin >> n >> m;
for(int i = 0; i < n; i++)
cin >> stage[i];
int ans = 0;
for(int k = 0; k < n+m-1; k++)
{
int idx = 0;
for(int i = min(k, n-1); i >= 0 && k-i < m; i--)
{
if(idx > 0)
{
dp[k][idx][0] = max(dp[k][idx-1][0], max(dp[k][idx-1][1], dp[k][idx-1][2]));
dp[k][idx][1] = max(dp[k][idx-1][0], dp[k][idx-1][1]);
dp[k][idx][2] = max(dp[k][idx-1][0], dp[k][idx-1][2]);
}
if(stage[i][k-i] == 'G')
{
if(i-1 >= 0 && i+1 < n && stage[i-1][k-i] == 'R' && stage[i+1][k-i] == 'W')
dp[k][idx][1]++;
if(k-i-1 >= 0 && k-i+1 < m && stage[i][k-i-1] == 'R' && stage[i][k-i+1] == 'W')
dp[k][idx][2]++;
}
idx++;
}
ans += max(dp[k][idx-1][0], max(dp[k][idx-1][1], dp[k][idx-1][2]));
}
cout << ans << '\n';
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |