数字三角动态规划实现

来源:互联网 发布:我知女人心阅读全文 编辑:程序博客网 时间:2024/05/01 11:05
// Digital_Triangle.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"//预编译#include<iostream>using namespace std;inline int max(int r, int s);//最大值子函数int main(){int a[100][100];int m[100][100];int n;//行数cin >> n;//初始化for (int i = 0; i < n; i++) {for (int j = 0; j <= i; j++) {cin >> a[i][j];}}//填表m[][]for (int i = n - 1; i >= 0; i--) {//自底向上计算for (int j = 0; j <= i; j++) {if (i == n - 1) {m[i][j] = a[i][j];}else {m[i][j] = max(m[i + 1][j], m[i + 1][j + 1]) + a[i][j];}}}//输出最大值cout << m[0][0] << endl;//输出最大路径,如果有相同,选择靠右int x = 0;for (int i = 0; i < n; i++) {bool right = m[i][x] <= m[i][x + 1];if (right) {cout << a[i][x + 1] << " ";x++;//x应该增加1,因为靠右边的数较大,子数字三角选择右边。}else {cout << a[i][x] << " ";}}    return 0;}inline int max(int r, int s) {if (r >= s) {return r;}else {return s;}}

代码记录。

思路是动态规划的思路。

0 0