请问这道“数字三角形”的代码如何理解呢?

img

#include <cstdio>
#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <math.h>
using namespace std;
int val[101][101];
int f[101][101]; 
int n;
int main()
{
    memset(f,0,sizeof(f));
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=i;j++)
        {
            cin>>val[i][j];
        }
    } 
    for(int i=n;i>=1;i--)
    {
        for(int j=1;j<=i;j++)
        {
            f[i][j]=max(f[i+1][j+1],f[i+1][j])+val[i][j];
        }
    }
    cout<<f[1][1];
    return 0;
}


我不是很理解这些代码,希望大家帮我注释一下和给出思路分析,谢谢!

没看到max函数的代码呢,前面的代码是给数组赋值的