Official
D - Weak Takahashi Editorial by en_translator Editorial for printing
Let \(f(i, j)\) the maximum number of squares he can visit before he stops if he starts walking from square \((i, j)\).
For convenience, let \(f(i, j) = 0\) if \((i, j)\) is a wall or outside the grid. Then, for any empty square \((i, j)\), the following relation holds.
- \(f(i, j) = \max (f(i + 1, j), f(i, j + 1)) + 1\)
Therefore, one can determine \(f(i, j)\) in order, larger indices first. The answer is \(f(1, 1)\).
Note that the problem statements and this editorial are 1-indexed, while the sample code below is 0-indexed.
Sample code (C++):
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
vector c(n, vector<char>(m));
for (auto& v : c) {
for (char& x : v) {
cin >> x;
}
}
vector f(n + 1, vector<int>(m + 1));
for (int i = n - 1; i >= 0; --i) {
for (int j = m - 1; j >= 0; --j) {
if (c[i][j] == '#') continue;
f[i][j] = max(f[i + 1][j], f[i][j + 1]) + 1;
}
}
cout << f[0][0] << '\n';
}
posted:
last update: