POJ:1163 The Triangle

POJ:1163 The Triangle_第1张图片

题意:从三角形中选择从顶到底走的数字最大的路径输出结果

分析:1、动态规划递归问题,每个数字都等于他自己加上下方或右下方最长的路,最后一行直接为自身的值,递归向上

         将输入存入二维数组中,(i,j)代表第i行j列的数

         但是要注意将每个节点的最大路径存起来,这样第二次访问时就不用再求一遍,直接使用,不然会超时

         2、递推问题,从最后一行向上递推求解

 
  

#include

#include

//http://bailian.openjudge.cn/practice/1163/

using namespace std;

int sum[105][105];

int init[105][105];

int m;

int maxsum(int x,int y){//递归求解

    if(sum[x][y]!=-1)return sum[x][y];

    if(x==m)return init[x][y];

    sum[x][y]=+init[x][y]+max(maxsum(x+1,y),maxsum(x+1,y+1));

    return sum[x][y];

}

int main(){

    cin>>m;

    for(int i=1;i<=m;i++){

        for(int j=1;j<=i;j++){

            cin>>init[i][j];

            sum[i][j]=-1;

        }

    }

    for(int i=1;i<=m;i++)sum[m][i]=init[m][i];//递推求解

    for(int i=m-1;i>=1;i--){

        for(int j=1;j<=i;j++){

            sum[i][j]=max(sum[i+1][j],sum[i+1][j+1])+init[i][j];

        }

    }

    cout<<sum[1][1]<<endl;

//    cout<

}


你可能感兴趣的:(poj)