• NUC1041 数字三角形【DP】


    USACO Gateway


    数字三角形

    时间限制: 1000ms 内存限制: 32768KB

    问题描述

    佳佳遇到一个麻烦的问题,如下图所示,一个数字三角形,佳佳想找出从三角形顶点到底某处的一条路径,使的该路径所经过的数字总和最大.(1).每一步可沿左斜线向下或右斜线向下.(2).1<=三角形行数(L)<=99(3).三角形中的数字为0,1,...,99

    图中沿所画的线路可得到最大的值,但是佳佳遇到很多数字三角形,请你帮她写一个程序求出最大的路径的值.

    输入描述

    有多组测试数据,每组测试数据第一行为一正整数 L(0 < L < 100),表示下边是一个L行的三角形.接下来L行每行有Ki个数字(Ki=1,2,...,L).

    输出描述

    输出所找到路径的最大值.

    样例输入

    3

    1

    2 3

    5 6 4

    5

    7

    3 8

    8 1 0

    2 7 4 4

    4 5 2 6 5

    样例输出

    10

    30

    来源

    {NOJ}


    问题分析:

    这个题与《Project Euler Problem 18 Maximum path sum I》完全相同,只是程序中最大的行数是不一样的,需要改为100。

    直接计算就可以了,关键是如何用二维数组存储数据,以及数据之间的规律。

    程序说明:

    程序是CV过来的,小改一下就AC了。

    参考链接:Project Euler Problem 18 Maximum path sum I

    题记:

    程序写多了,似曾相识的也就多了。


    AC的C++程序如下:

    #include <iostream>
    #include <cstring>
    
    using namespace std;
    
    const int N = 100;
    
    int grid[N][N];
    int max;
    
    inline int mymax(int left, int right)
    {
        return left > right ? left : right;
    }
    
    int setmax(int n)
    {
        for(int i=1; i<n; i++)
            for(int j=0; j<=i; j++)
                if(j == 0)
                    grid[i][j] += grid[i-1][j];
                else
                    grid[i][j] = mymax(grid[i][j] + grid[i-1][j-1], grid[i][j] + grid[i-1][j]);
    
        int max = 0;
        for(int i=n-1, j=0; j<n; j++)
            if(grid[i][j] > max)
                max = grid[i][j];
    
        return max;
    }
    
    int main()
    {
        int n;
    
        while(cin >> n && n<=N) {
            memset(grid, 0, sizeof(grid));
    
            for(int i=0; i<n; i++) {
                for(int j=0; j<=i; j++)
                    cin >> grid[i][j];
            }
    
            int max = setmax(n);
    
            cout << max << endl;
        }
        return 0;
    }






  • 相关阅读:
    vim命令大全
    单例的正确姿势
    mac配置android开发环境(一)
    as 开启代码混淆和自定义混淆规则
    ubuntu中使用eclipse开发android,logcat显示问题
    linux winqq 不能输入中文的解决办法
    安卓6.0之前的系统 判断app是否有录音权限
    打开一个本地apk进行安装
    (转载)单例模式的几种应用
    startActivityForResult和setResult详解
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7563831.html
Copyright © 2020-2023  润新知