제출 #1178825

#제출 시각아이디문제언어결과실행 시간메모리
1178825MongHwaDango Maker (JOI18_dango_maker)C++20
100 / 100
168 ms139008 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...