7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
(Figure 1)
Your program is to read from standard input. The first line
contains one integer N: the number of rows in the triangle. The
following N lines describe the data of the triangle. The number of rows
in the triangle is > 1 but <= 100. The numbers in the triangle,
all integers, are between 0 and 99.
Output
Your program is to write to standard output. The highest sum is written as an integer.
Sample Input
5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5Sample Output
30
简单动态规划从下往上相邻找最大加上去。像二叉树。
代码:
#include <iostream> #include <map> #include <queue> #include <cmath> #include <cstdio> #include <algorithm> #include <cstring> #define inf 10001 using namespace std; int main() { int n,d,sum = 0; int a[100][100] = {0}; cin>>n; for(int i = 0;i < n;i ++) { for(int j = 0;j <= i;j ++) { cin>>a[i][j]; } } for(int i = n - 2;i >= 0;i --) { for(int j = 0;j <= i;j ++) a[i][j] += max(a[i+1][j],a[i+1][j+1]); } cout<<a[0][0]; }
如果觉得有帮助,点个推荐啦~