码迷,mamicode.com
首页 > 其他好文 > 详细

每日编程-20170401

时间:2017-04-02 20:25:37      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:bsp   保存   答案   color   输入   clu   cin   ios   练习   

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

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

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 }

 

每日编程-20170401

标签:bsp   保存   答案   color   输入   clu   cin   ios   练习   

原文地址:http://www.cnblogs.com/linhaowei0389/p/6659692.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!