问题简介
具体问题请参考
hihocoder的网站。
算法思想
此问题可以看做给定一个无环图,求路径上节点值之后最大的路径,是一个经典的动态规划问题。方程可以看做f[i][j] = value[i][j]+max(f[i+1][j],f[i+1][j+1]),由最底层到最高层枚举即可。
代码
#include <iostream>
using namespace std;
int main()
{
int numbers[201][201] = {0};
int n;
cin >> n;
for (int i = 0;i < n;++i){
for (int j = 0;j < i+1;++j)
cin >> numbers[i][j];
}
for (int i = n-2;i > -1;--i){
for (int j = 0;j < i+1;++j)
numbers[i][j] += max(numbers[i+1][j],numbers[i+1][j+1]);
}
cout << numbers[0][0] << endl;
return 0;
}