初等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;
} 
View Code

 

posted @ 2013-08-06 21:18  执着追求的IT小小鸟  阅读(141)  评论(0编辑  收藏  举报