第二次上机实验报告
1.问题描述:
给定一个由 n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形 的顶至底的一条路径(每一步可沿左斜线向下或右斜线向下),使该路径经过的数字总和最大。
2.算法描述:
#include<iostream>
#include <cmath>
using namespace std;
int main()
{
int D[100][100];
int n;
int maxSum[100][100];
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];
return 0;
}
3. 算法时间及空间复杂度分析
这是一道动态规划问题,首先我们要列出递归方程,然后在按照递归方程填表。我们列的递归方程是从下往上填表的
4.心得体会:我是负责看他打代码的,一开始我们的思路出现了矛盾,他的想法是自上而下,然后代码上出现了混乱,然后找不到跳出来的思路,最后按照我的思路完成了代码。所以小组合作是有必要的,取长补短。有的更擅长打代码,有的在思想上更擅长,互相学习。