自己的思想:要用逆序,但是某个未知的位置可能存在一个非常大的数,因此不知道如何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]; }