本题考察点:dp,数字三角形
本人思路:因为每层都有在下一层对应的两个子节点,所以可以对下一层的最大值计算。
则可得到
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+100;
int n,a[N][N],f[N][N];
int main(){
ios::sync_with_stdio(false);
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
cin>>a[i][j];
}
}
memset(f,0,sizeof(f));
f[1][1]=a[1][1];
for(int i=1;i<n;i++){
for(int j=1;j<=i;j++){
f[i+1][j]=max(f[i][j]+a[i+1][j],f[i+1][j]);
f[i+1][j+1]=max(f[i][j]+a[i+1][j+1],f[i+1][j+1]);
}
}
// for(int i=1;i<=n;i++){
// for(int j=1;j<=i;j++){
// cout<<f[i][j]<<" ";
// }
// cout<<endl;
// }
int ans=0;
for(int i=1;i<=n;i++) ans=max(ans,f[n][i]);
cout<<ans<<endl;
return 0;
}