- 题干:传送门
题干分析
- 就是普通的题,递推/动规/贪心都行的… (就暴力不行)
- 如果我们把每个点单独拿来看的话,点z只能从点x,y继承数字和。
- 拿样例举例来说:
- 值为14 的点
不指了,懒啊,只能从点值为7或12的点继承数字和。
算法思路
- 递推/动规/贪心: 从上往下,每一层找上两个中数字和最大的,加上自己后继承。
代码
#include<bits/stdc++.h>
using namespace std;
int n,f[1001][1001],s=0;
int main(){
memset(f,0,sizeof(f));
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
cin>>f[i][j];
}
}
for(int i=2;i<=n;i++){
for(int j=1;j<=i;j++){
f[i][j]=max(f[i-1][j]+f[i][j],f[i-1][j-1]+f[i][j]);
}
}
for(int i=1;i<=n;i++) s=max(s,f[n][i]);
cout<<s<<endl;
}