初等dp求最大路径和,POJ1163
http://poj.org/problem?id=1163
因为要求的是最大的路径和,那就开个数组存储,然后从倒数第二行开始计算,每条路径上要保留左右子树上的最大数再加上本身的数,然后保留在本身结点位置,可避免重复计算
转移方程num(i,j)=max(num(i+1,j),num(i+1,j+1))+num(i,j);
#include<stdio.h> int max(int a,int b) { return a>b?a:b; } int main() { int num[101][101],sum,i,j; scanf("%d",&sum); for(i=0;i<sum;i++) for(j=0;j<=i;j++) scanf("%d",&num[i][j]);//存储 for(i=sum-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]); return 0; }