제출 #233923

#제출 시각아이디문제언어결과실행 시간메모리
233923nicolaalexandraDango Maker (JOI18_dango_maker)C++14
100 / 100
538 ms88568 KiB
#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;
}

컴파일 시 표준 에러 (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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...