水题,直接跑一遍二维数组dp即可,转移是显然的。

#include<bits/stdc++.h>
using i64 = long long;

int main() {
    std::cin.tie(nullptr)->sync_with_stdio(false);

    int n, m;
    std::cin >> n >> m;
    std::vector<std::string> a(n);
    for (auto &s : a) std::cin >> s;

    std::vector dp(n, std::vector<i64>(m));

    std::map<char, int> mp;
    mp['l'] = 4;
    mp['o'] = 3;
    mp['v'] = 2;
    mp['e'] = 1;

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (i) dp[i][j] = std::max(dp[i][j], dp[i - 1][j]);
            if (j) dp[i][j] = std::max(dp[i][j], dp[i][j - 1]);
            dp[i][j] += mp[a[i][j]];
        }
    }

    std::cout << dp[n - 1][m - 1];

    return 0;
}

https://www.nowcoder.com/discuss/727521113110073344