本文共 1792 字,大约阅读时间需要 5 分钟。
为了解决这个问题,我们需要找到一个二维区域内最长的滑雪路径。滑雪的规则是只能向下滑动,且每一步必须是高度递减的。我们可以使用动态规划的方法来解决这个问题。
#include#include #include using namespace std;int main() { int R, C; cin >> R >> C; vector > height(R, vector (C, 0)); for (int i = 0; i < R; ++i) { for (int j = 0; j < C; ++j) { int h; cin >> h; height[i][j] = h; } } vector > points; for (int i = 0; i < R; ++i) { for (int j = 0; j < C; ++j) { points.emplace_back(height[i][j], i, j); } } sort(points.begin(), points.end(), [](const pair & a, const pair & b) { return a.first > b.first; }); vector > dp(R, vector (C, 1)); vector > dirs = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; for (const auto& p : points) { int h = p.first; int i = p.second.first; int j = p.second.second; for (const auto& dir : dirs) { int ni = i + dir.first; int nj = j + dir.second; if (ni >= 0 && ni < R && nj >= 0 && nj < C) { if (h > height[ni][nj] && dp[ni][nj] + 1 > dp[i][j]) { dp[i][j] = dp[ni][nj] + 1; } } } } int max_length = 1; for (int i = 0; i < R; ++i) { for (int j = 0; j < C; ++j) { if (dp[i][j] > max_length) { max_length = dp[i][j]; } } } cout << max_length << endl; return 0; }
height。points中。dp数组记录每个点的最长路径长度,初始值为1。dp数组,找出最大值作为最长滑雪路径的长度。这个方法确保了每个点的最长路径被正确计算,且处理顺序保证了正确性,能够高效解决问题。
转载地址:http://akxfk.baihongyu.com/