#includeusing namespace std; int a[20][20] = { 0 }; int dp[20][20] = { 0 }; //动态规划表 int m; int n; void findMax() { //动态规划 for (int i = m; i >= 1; i--) { for (int j = 1; j <= n; j++) { dp[i][j] = a[i][j] + max(dp[i + 1][j], dp[i + 1][j + 1]); } } } void print() { cout << "最大路径和是:" << dp[1][1] << endl; } void printt() { cout << "最大路径路线为:"; int l = 0; for (int i = 1; i <= m; i++) { if (dp[i][l] > dp[i][l + 1]) cout << a[i][l] << " "; else { cout << a[i][l + 1] << " "; l = l + 1; } } } int main() { cout << "请确定数字三角形的层数:"; cin >> m; cout << "请确定数字三角形最后一层的数字个数:"; cin >> n; cout << "请输入数字三角形的数字"; for (int i = 1; i <= m; i++) { for (int j = 1; j <= i; j++) { cin >> a[i][j]; } } for (int i = 1; i <= m; i++) { for (int j = 1; j <= i; j++) { cout << a[i][j] << " "; } cout << endl; } findMax(); print(); printt(); return 0; }
结果演示:



