算法第3章上机实践报告

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

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int a[150][150];
    int dp[150][150];
    int main()
    {
    int n;
    scanf("%d", &n);
    int i, j;
    for(i =1;i <= n;i++){
    for(j = 1;j <=i;j++){
    scanf("%d", &a[i][j]);
    }
    }
    for(i =1;i <= n;i++){
    dp[n][i] = a[n][i];
    }
    for(i = n;i > 1;i--){
    for(j = 1; j<= i;j++){
    if(dp[i][j] > dp[i][j+1]){
    dp[i-1][j] = a[i-1][j] + dp[i][j];
    }else {
    dp[i-1][j] = a[i-1][j] + dp[i][j+1];
    }
    }
    }
    printf("%d\n", dp[1][1]);



    return 0;
    }

  4. 算法时间及空间复杂度分析(要有分析过程):O(n^2)
  5. 心得体会(对本次实践收获及疑惑进行总结):本次上机实践由于一些知识没有搞明白,在课上并没有把问题解决,在回到宿舍看着网上的一些代码,自己慢慢分析再进行打代码编译成功的,不过这样我认为对自己的帮助还是很大的,至少我能在最后理解了这个问题的思想。

posted on 2018-11-04 21:58  曾志豪Hall  阅读(108)  评论(0编辑  收藏  举报

导航