最大路径和三角形,如何找到添加的元素

时间:2018-05-05 16:04:56

标签: c++

Euler三角形问题是找到从第一个数字到最后一个数字之一(最后一行)的最大总和

所以输入可以是:

5 //the number of rows
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5

输出应为:

30
7 3 8 7 5

我能找到SUM(例如30),但我找不到一种方法来正确找到所有总结的元素。

这是功能:

    #include <iostream>
    #include <vector>

    using namespace std;

    int main()
    {
        int m;
        cin >> m;

       int tri[m][m];

    for(int i=0; i < m; i++)
    {
        for(int j=0; j <= i; j++)
        {
            cin >> tri[i][j];
        }
    }

    for (int i=m-2; i>=0; i--)
     {
        for (int j=0; j<=i; j++)
        {
            if (tri[i+1][j] > tri[i+1][j+1])
            {
                tri[i][j] += tri[i+1][j];
            }
            else
                tri[i][j] += tri[i+1][j+1];
        }
     }



  cout << tri[0][0];
     return 0;
    } 

使用向量矩阵的方法:

#include <iostream>
#include <vector>
#include <numeric>

using namespace std;

int main()
{
    int m;
    cin >> m;

    vector<int> tri[m][m];

    int input;
    for(int i=0; i < m; i++)
    {
        for(int j=0; j <= i; j++)
        {
            cin >> input;
            tri[i][j].push_back(input);
        }
    }

    //make other entries zero        
    for(int i=0; i < m; i++)
         for(int j=0; j < m; j++)
             for(unsigned int k=0; k < tri[i][j].size(); k++)
                 if(tri[i][j][k] > 1000)               
                      tri[i][j][k] = 0;

    vector<int> input_vec;
    int sum_of_elem1, sum_of_elem2;
    for (int i=m-2; i>=0; i--)
     {
        for (int j=0; j<=i; j++)
        {
            sum_of_elem1 = accumulate(tri[i+1][j].begin(), tri[i+1][j].end(), 0);
            sum_of_elem2 = accumulate(tri[i+1][j+1].begin(), tri[i+1][j+1].end(), 0);

            if (sum_of_elem1 > sum_of_elem2)
            {
                tri[i][j] = tri[i+1][j];
            }else
                tri[i][j] = tri[i+1][j+1];
        }
     }


      int sum_of_elem3 = accumulate(tri[0][0].begin(), tri[0][0].end(), 0);

      cout << sum_of_elem3;

      for(int i=0; i<5; i++)
      {
        cout << tri[0][0][i] << " ";
      }

      for(int i=0; i<5; i++)
         {
           for(int j=0; j<5; j++)
             {
               tri[i][j].clear();
             }
         }

     return 0;
}

0 个答案:

没有答案