#include<bits/stdc++.h>
using namespace std;
const int MAXN=3005;
const int INF=1e9;
int dp[MAXN][8];
string s[MAXN];
bool cka[MAXN][MAXN],ckb[MAXN][MAXN];
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int n,m,sum=0;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
    	cin>>s[i];
    	s[i]=' '+s[i];
	}
	for(int i=1;i<=n;i++) for(int j=1;j+2<=m;j++) sum+=(cka[i][j]=(s[i][j]=='R'&&s[i][j+1]=='G'&&s[i][j+2]=='W'));
	for(int i=1;i+2<=n;i++) for(int j=1;j<=m;j++) sum+=(ckb[i][j]=(s[i][j]=='R'&&s[i+1][j]=='G'&&s[i+2][j]=='W'));
	for(int i=2;i+2<=n+m;i++)
	{
		int mx=0;
		for(int j=0;j<8;j++) dp[max(1,i-m)-1][j]=-INF;
		dp[max(1,i-m)-1][0]=0;
		for(int j=max(1,i-m);j<=min(n,i-1);j++)
		{
			for(int k=0;k<8;k++) dp[j][k]=-INF;
			for(int k=0;k<8;k++)
			{
				int v=k%4*2+ckb[j][i-j];
				dp[j][v]=max(dp[j][v],dp[j-1][k]);
				if(cka[j][i-j]) for(int l=0;l<3;l++) if(v&(1<<l)) dp[j][v-(1<<l)]=max(dp[j][v-(1<<l)],dp[j-1][k]+1);
			}
		}
		for(int j=0;j<8;j++) mx=max(mx,dp[min(n,i-1)][j]);
		sum-=mx;
	}
	cout<<sum;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |