经典动态规划题
题目大意:对于一个有数字组成的二叉树,求由叶子到根的一条路径,使数字和最大,如:
Sample Input
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
Sample Output
30
思路就是由下向上动态规划,保存页子节点到当前节点的最大值,最后结果就是num[0][0](num用来存放三角数据)
代码如下:
Code
#include<stdio.h>
#define max(a,b) (a>b?a:b)
int main()
{
int n, num[105][105],i ,j;
scanf("%d",&n);
for(i=0;i<n;i++){
for(j=0;j<=i;j++)
scanf("%d",&num[i][j]);
}
for(i=n-2;i>=0;i--){
for(j=0;j<=i;j++){
num[i][j]=max(num[i+1][j],num[i+1][j+1])+num[i][j];
}
}
printf("%d\n",num[0][0]);
}
#include<stdio.h>
#define max(a,b) (a>b?a:b)
int main()
{
int n, num[105][105],i ,j;
scanf("%d",&n);
for(i=0;i<n;i++){
for(j=0;j<=i;j++)
scanf("%d",&num[i][j]);
}
for(i=n-2;i>=0;i--){
for(j=0;j<=i;j++){
num[i][j]=max(num[i+1][j],num[i+1][j+1])+num[i][j];
}
}
printf("%d\n",num[0][0]);
}