数字三角形最大路径和:代码解析与优化
{/'title/':/'数字三角形最大路径和:代码解析与优化/',/'description/':/'本文解析了数字三角形最大路径和问题的代码,并提供了优化方案。代码使用动态规划方法,从三角形的顶端开始,逐层计算每条路径的最大和,最终找到全局最大和。文章还解释了代码中的错误并提供了更正后的代码示例。/',/'keywords/':/'数字三角形, 最大路径和, 动态规划, 代码解析, 代码优化, C++/',/'content/':/'///'你的代码有误是因为在计算dp[i][t]时,对于t不等于0和i的情况,你使用的是max(dp[i-1][t]+V[i][t], dp[i-1][t-1]+V[i][t]),这样会导致路径走到当前位置时不一定是从上一行的左边或右边走过来的。应该根据题目要求,路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右边的那个数,所以要分别计算从左边和右边走过来的情况,然后取较大的值。修改后的代码如下:////n//ncpp//n#include <iostream>//n#include <vector>//nusing namespace std;//n//nint main()//n{//n int N;//n cin >> N;//n vector<vector<int>> V(N, vector<int>(N));//n vector<vector<int>> dp(N, vector<int>(N));//n//n for (int i = 0; i < N; i++) {//n for (int t = 0; t <= i; t++) {//n cin >> V[i][t];//n }//n }//n//n dp[0][0] = V[0][0];//n//n for (int i = 1; i < N; i++) {//n for (int t = 0; t <= i; t++) {//n if (t == 0) {//n dp[i][t] = dp[i - 1][t] + V[i][t];//n } else if (t == i) {//n dp[i][t] = dp[i - 1][t - 1] + V[i][t];//n } else {//n dp[i][t] = max(dp[i - 1][t] + V[i][t], dp[i - 1][t - 1] + V[i][t]);//n dp[i][t] = max(dp[i][t], dp[i - 1][t + 1] + V[i][t]);//n }//n }//n }//n//n int maxSum = 0;//n for (int t = 0; t < N; t++) {//n maxSum = max(maxSum, dp[N - 1][t]);//n }//n//n cout << maxSum;//n//n return 0;//n}//n////n//n以上代码的思路是从上往下计算每个位置的最大和,并且保存在dp数组中。最后,遍历最后一行的所有位置,取其中的最大值作为答案。////n//n///'}/
原文地址: https://www.cveoy.top/t/topic/prgv 著作权归作者所有。请勿转载和采集!