This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define DIM 3001
using namespace std;
int dp[DIM][DIM][2];
char a[DIM][DIM];
int n,m,i,j;
int verif_vert (int i, int j){
if (a[i-2][j] == 'R' && a[i-1][j] == 'G' && a[i][j] == 'W')
return 1;
return 0;
}
int verif_oriz (int i, int j){
if (a[i][j-2] == 'R' && a[i][j-1] == 'G' && a[i][j] == 'W')
return 1;
return 0;
}
int main (){
// ifstream cin ("date.in");
// ofstream cout ("date.out");
cin>>n>>m;
for (i=1;i<=n;i++)
cin>>a[i]+1;
/**
R G W
R G W
R G W
**/
/// dp[i][j][0/1] - nr maxim de piese pe care le pot lua pana la i,j
/// 0 - orizontal, 1 - vertical
for (i=1;i<=n;i++)
for (j=1;j<=m;j++){
/// nu fac nimic
dp[i][j][0] = max (dp[i-1][j+1][0],dp[i-1][j+1][1]);
dp[i][j][1] = max (dp[i-1][j+1][0],dp[i-1][j+1][1]);
/// incerc sa pun piese orizontala sau verticala
if (verif_oriz(i,j+1))
dp[i][j][0] = max (dp[i][j][0],dp[i-1][j+1][0] + 1);
if (verif_vert(i+1,j))
dp[i][j][1] = max (dp[i][j][1],dp[i-1][j+1][1] + 1);
}
int sol = 0;
for (i=1;i<=n;i++)
sol += max(dp[i][1][0],dp[i][1][1]);
for (i=2;i<=m;i++)
sol += max (dp[n][i][0],dp[n][i][1]);
cout<<sol;
return 0;
}
Compilation message (stderr)
dango_maker.cpp: In function 'int main()':
dango_maker.cpp:26:18: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
cin>>a[i]+1;
~~~~^~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |