本文主要是介绍C++数塔问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
#include <iostream>
#include <vector>using namespace std;int main() {// 读取输入int n;cin >> n;vector<vector<int>> tower(n, vector<int>(n));for (int i = 0; i < n; i++) {for (int j = 0; j <= i; j++) {cin >> tower[i][j];}}// 动态规划求解vector<vector<int>> dp = tower;for (int i = n - 2; i >= 0; i--) {for (int j = 0; j <= i; j++) {dp[i][j] += max(dp[i + 1][j], dp[i + 1][j + 1]);}}// 输出结果cout << dp[0][0] << endl;return 0;
}
首先读取输入的数塔,将数塔表示为一个二维数组 tower
,创建一个大小与数塔相同的二维数组 dp
,用于存储从底部到当前位置的最大路径和。通过逆向遍历数塔,从倒数第二层开始,每一层的每个位置的最大路径和可以通过其下一层相邻的两个位置的最大路径和来计算。最后,输出 dp[0][0]
,即为从顶部到底部的最大路径和。
这篇关于C++数塔问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!