算法第3章上机实践报告

Posted utut

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法第3章上机实践报告相关的知识,希望对你有一定的参考价值。

1.实践题目

数字三角形

2.问题描述

给定一个由 n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形 的顶至底的一条路径(每一步可沿左斜线向下或右斜线向下),使该路径经过的数字总和最大。

3.算法描述

代码如下:

#include <iostream>
using namespace std;
int max(int a,int b){
 return a>b?a:b;
}
int arr[101][101];
int main(){
 int n;
 cin>>n;
 for(int r = 0;r < n; r++){             //输入让其成为一个直角三角形,每一步要不向下走,要不向右下走
  for(int c = 0; c <= r ; c++){
   cin>>arr[r][c];
  }
 }
                                                                           //arr[i][j]   代表那一行那一列的那个值
 for(int i = n-2 ; i >= 0; i--){                                 //从倒数第二行开始
  for(int w = 0; w <= i+1 ; w++){                         //每次都从第一列开始
   arr[i][w] += max(arr[i+1][w],arr[i+1][w+1]);      //计算每一次走是向下走的还是向右下走加起来的值大,取代原来的值
  }
 }
 cout<<arr[0][0];
 return 0;
}
 
4.算法时间及空间复杂度分析
 
算法时间: 算法有两个for循环,因而时间复杂度为:O(n^2)
空间复杂度: 由于开辟了新的辅助空间——数组arr[101][101],故空间复杂度为O(n^2)
 
5.心得体会
在写代码之前,要尽可能地去分析问题,按照动态规划的思想,化大为小(有联系),明确一步内有多少个可能性的操作,写出递归方程。建立数组时,如一个二维数组a【i】【j】,i,j可以代表什么意义,如从i---》j的序列,又或如i,j代表两个不同的序列的意思,i代表以i结尾的第一个序列,j代表以j结尾的第二个序列。


















以上是关于算法第3章上机实践报告的主要内容,如果未能解决你的问题,请参考以下文章

算法第3章上机实践报告

算法第3章上机实践报告

算法第3章上机实践报告

算法第3章上机实践报告

算法第3章上机实践报告

算法第3章上机实践报告