zoukankan      html  css  js  c++  java
  • 初等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
    ",num[0][0]);
        return 0;
    } 
    View Code
  • 相关阅读:
    第25周三
    第25周二
    第25周一
    第24周日
    第24周六
    第24周五
    第24周四经验感受想法
    第24周三
    第24周二
    01背包问题
  • 原文地址:https://www.cnblogs.com/huzhenbo113/p/3241990.html
Copyright © 2011-2022 走看看