【动规初步】数字三角形
题目描述
如下所示为一个数字三角形:
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
请编一个程序计算从顶至底的某处的一条路径,使该路径所经过的数字的总和最大。
● 每一步可沿直线向下或右斜线向下走;
● 1<三角形行数≤100;
● 三角形中的数字为整数0,1,……,99;
输入
第一行为一个自然数,表示数字三角形的行数n,接下来的n行表示一个数字三角形。
输出
仅有一行包含一个整数,表示要求的最大总和。
样例输入
5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5
样例输出
max=30
#include<bits/stdc++.h> using namespace std; int n; int tri[102][102]; int f[102][102]; int main() { cin >> n; int i,j; for(i = 0;i < n;i++) for(j = 0;j <= i;j++) { cin >> tri[i][j]; } for(i = 0;i < n;i++) for(j = 0;j <= i;j++) { f[i][j] = max(f[i-1][j],f[i-1][j-1]) + tri[i][j]; } for(i = 0;i<n;i++) f[n-1][0]=max(f[n-1][0],f[n-1][i]); cout << "max=" <<f[n-1][0]; return 0; }

浙公网安备 33010602011771号