动态规划1-数字三角形(算法基础 第4周)

来源:互联网 发布:数据分析师专业 编辑:程序博客网 时间:2024/06/05 00:57

问题讲解:
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
分析:
目前动归这一块还没太理解。

源码:

//"人人为我"递推型动归程序#include <iostream>#include <algorithm>using namespace std;#define MAX 101int D[MAX][MAX]; int n;int maxSum[MAX][MAX];int main() {    cin >> n;    for(int i=1; i<=n; i++)         for(int j=1; j<=i; j++)            cin >> D[i][j];    for(int i=1; i<=n; i++)        maxSum[n][i] = D[n][i];    for(int i=n-1; i>=1; i--)        for(int j=1; j<=i; j++)            maxSum[i][j]=max(maxSum[i+1][j], maxSum[i+1][j+1]) + D[i][j];    cout << maxSum[1][1] << endl;}/*//数字三角形的记忆递归型动归程序#include <iostream>#include <algorithm>using namespace std;#define MAX 101int D[MAX][MAX]; int n;int maxSum[MAX][MAX];int MaxSum(int i, int j) {    if(maxSum[i][j] != -1)        return maxSum[i][j];    if (i==n)        maxSum[i][j] = D[i][j];     //'='写为'=='号,查了半个多小时    else {        int x = MaxSum(i+1, j);        int y = MaxSum(i+1, j+1);        maxSum[i][j] = max(x, y) + D[i][j];    }    return maxSum[i][j];}int main() {    cin >> n;    for(int i=1; i<=n; i++)        for(int j=1; j<=i; j++) {            cin >> D[i][j];            maxSum[i][j] = -1;        }    cout << MaxSum(1, 1) << endl;}*/
0 0
原创粉丝点击