zoukankan      html  css  js  c++  java
  • 数字三角形(数塔问题)

    一句话题目:给出一个n层的三角形,每个位置有一个数字,到达后可获得,求到达最低层能达到的最大数字和。

     

    题目分析:

    首先我们考虑能不能用搜索做,因为对于一个坐标,我们只有向下的左边或者右边。对于一个三角形我们进行特殊的处理,比如下面的三角形我们可以处理成

    我们可以观察出状态转换方程为:f[i][j] = max(f[i+1][j],  f[i+1][j+1])  + val[i][j] ,即处于横纵坐标分别为i,j位置的点的最大数字和为 这一点左下方或右下方的值 + 此点的数字

    #include <cstdio>
    #include <iostream>
    
    const int maxn = 1010;
    using namespace std;
    int n;
    int f[maxn][maxn], val[maxn][maxn];
    int main(){
        scanf("%d", &n);
        for (int i = 1;i <= n;i ++)
            for (int j = 1;j <= i;j ++) scanf("%d", &val[i][j]);
        for (int i = n;i >= 1;i --)
            for (int j = 1;j <= i;j ++)
                f[i][j] = max(f[i+1][j], f[i+1][j+1]) + val[i][j];
        printf("%d", f[1][1]);
        return 0;
    }
  • 相关阅读:
    01、MySQL_简介
    算法—打擂台法
    第10章 对文件的输入输出
    第9章 用户自己建立数据类型
    Spring Cloud
    JUC
    Swagger Learing
    JUC
    Spring Data
    SpringCloud
  • 原文地址:https://www.cnblogs.com/wxx23-IOU/p/13557002.html
Copyright © 2011-2022 走看看