zoukankan      html  css  js  c++  java
  • 每日编程-20170401

    题目:示出了一个数字三角形。 请编一个程序计算从顶至底的某处的一条路 径,使该路径所经过的数字的总和最大。  

    每一步可沿左斜线向下或右斜线向下走;

    1< 三角形行数< 25;  

    三角形中的数字为整数< 1000;

    输入第一行为N,表示有N行 后面N行表示三角形每条路的路径权

    输出路径所经过的数字的总和最大的答案

    样例输入

    5
    7
    3 8
    8 1 0
    2 7 4 4
    4 5 2 6 5
    样例输出

    30

    解答:

    DP还是不太会啊,找了个最传统的练习一下

    保存三角形后,从下向上算

    倒数第二行,第一个数,它的选择只有最后一行的第一个和第二个数,选一个最大的加到自身

    一行都算完,表示这一行的每个位置的最大的选择是多少

    然后计算上一行

    一直到第一行,就是第一行的最大的选择

     1 #include <iostream>
     2 #include <vector>
     3 using namespace std;
     4 int Max(int a, int b) { return a < b ? b : a; }
     5 int triangleMax(vector<vector<int>> &v) {
     6     for (auto i = v.size() - 2; i != -1; i--)
     7     {
     8         for (auto j = 0; j < v[i].size(); j++)
     9         {
    10             v[i][j] = v[i][j] + Max(v[i + 1][j], v[i + 1][j + 1]);
    11         }
    12     }
    13     return v[0][0];
    14 }
    15 int main() {
    16     int n;
    17     while (cin >> n)
    18     {    
    19         vector<vector<int>> v;
    20         vector<int> v2;
    21         for (auto i = 0; i < n; i++)
    22         {
    23             for (auto j = 0; j < i + 1; j++)
    24             {
    25                 int a;
    26                 cin >> a;
    27                 v2.push_back(a);
    28             }
    29             v.push_back(v2);
    30             v2.clear();
    31         }
    32         cout << triangleMax(v) << endl;
    33     }
    34 }
  • 相关阅读:
    java中interface的完整表述
    DoTA与人生
    DotNet.Utilities工具类
    visual studio xcopy /exclude测试
    Assembly.Load()方法,Assembly.LoadFrom()方法,Assembly.LoadFile()方法的区别!
    DataGridView列自适应宽度
    [Head First设计模式]
    winform 取消datagridview第一行选中状态
    winform WebBrowser如何修改使用默认的IE浏览器版本
    C# 注释换行
  • 原文地址:https://www.cnblogs.com/linhaowei0389/p/6659692.html
Copyright © 2011-2022 走看看