问题:
给定一个具有N层的数字三角形如下图,从顶至底有多条路径,每一步可沿左斜线向下或沿右斜线向下,路径所经过的数字之和为路径得分,请求出最大路径得分。
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
用到记忆化搜索的方式,可以增加效率,用递归算法太慢了。。。
/* 课上题目 最大路径得分 */ # include <iostream> using namespace std; const int MAX = 1e4; int dp[MAX][MAX], a[MAX][MAX]; inline int max(int x,int y) { return x < y ? y : x; } int main() { int i, j, n; while(cin >> n) { for(i = 1; i <= n; i++) for(j = 1; j <= i; j++) cin >> a[i][j]; // 最后一行 for(j = 1; j <= n; j++) dp[n][j] = a[n][j]; for(i = n - 1; i >= 1; i--) for(j = 1; j <= i; j++) dp[i][j] = a[i][j] + max(dp[i + 1][j], dp[i + 1][j + 1]); cout << dp[1][1] << endl; } return 0; }
时间: 2024-10-09 13:47:39