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;
    }
  • 相关阅读:
    webpack基本使用
    vue-路由-显示名称
    vue-父组件和路由
    vue-路由
    vue-父子组件和ref
    vue-组件
    go-面向对象编程(上)
    JavaScript的历史
    vue-列表动画
    钩子函数实现小球弹落
  • 原文地址:https://www.cnblogs.com/wxx23-IOU/p/13557002.html
Copyright © 2011-2022 走看看