[ACM_动态规划] 数字三角形(数塔)

时间:2023-03-08 16:20:22
递归方法解决数塔问题
状态转移方程:d[i][j]=a[i][j]+max{d[i+1][j],d[i+1][j+1]}
注意:1\d[i][j]表示从i,j出发的最大总和;2\变界值设为0;3\递归变界为n;4\结果为d[1][1]
#include<iostream>
#include<algorithm>
using namespace std;
#define maxn 1000+5
int n;
int a[maxn][maxn];
int d[maxn][maxn];
int D(int i,int j){ //递归解决状转移方程
return a[i][j]+(i==n ? :max(D(i+,j),D(i+,j+)));
}
int main(){ for(;cin>>n && n;){ //输入及d的初始化
memset(d,,sizeof(d));
int i,j;
for(i=;i<=n;i++){
for(j=;j<=i;j++){
cin>>a[i][j];
}
}
for(i=;i<=n;i++){ //求d[][]
for(j=;j<=i;j++){
d[i][j]=D(i,j);
}
}
cout<<d[][]<<'\n'; //输出
}
}