水题,直接跑一遍二维数组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; }