码迷,mamicode.com
首页 > 编程语言 > 详细

算法第3章上机实践报告

时间:2018-11-04 23:59:32      阅读:318      评论:0      收藏:0      [点我收藏+]

标签:c++   意思   --   空间复杂度   for循环   class   max   pac   数字三角形   

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章上机实践报告

标签:c++   意思   --   空间复杂度   for循环   class   max   pac   数字三角形   

原文地址:https://www.cnblogs.com/UTUT/p/9906421.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!