P1216 [USACO1.5] [IOI1994]数字三角形

发布时间 2023-07-12 20:40:16作者: ataraxyyeah

自己的思想:要用逆序,但是某个未知的位置可能存在一个非常大的数,因此不知道如何dp

看题解之后:对于倒数第二行的数,可以算出它们的最优解,依次往上推,第一个数就是整体的最优解,其实本质上可以用隔离意识来看,在搞最后一排时,将前面所有排隔离掉,在处理中间的每一排时,又将其他排隔离掉

接下来写一下代码

 

 

#include<iostream>
#include<cmath>
using namespace std;
int r,a[1005][1005],ans;

int main()
{
    cin>>r;
    for(int i=1;i<=r;i++)
    {
        for(int j=1;j<=i;j++)
        {
            cin>>a[i][j];
        }
    }

    for(int i=r-1;i>=1;i--)
    {
        for(int j=1;j<=i;j++)
        {
            a[i][j]=max(a[i+1][j]+a[i][j],a[i+1][j+1]+a[i][j]);
        }
    }

    cout<<a[1][1];
}