HDOJ 2084 数塔

来源:互联网 发布:演唱会售票软件 编辑:程序博客网 时间:2024/05/16 05:55

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084

 简单的DP

源代码

//HDOJ 2084 数塔  AC#include <iostream>using namespace std;int p[101][101];//数组int m[101][101]; //记录第一层到第i层第j个数能达到的最大值int main(){int N,i,j,max;int nCase;cin>>nCase;while(nCase--){cin>>N;max=0;//用以保存最大的和//输入数组for(i=1;i<=N;i++){for(j=1;j<=i;j++){cin>>p[i][j];}}for(i=1;i<=N;i++){for(j=1;j<=i;j++){if(j==1){// 在第i层的第一个时,显然只有上层第一个才能选这条路也就是说上一层的第j个元素m[i-1][j]m[i][j]=m[i-1][j]+p[i][j];}else if(j==i){ //同第一个的情况  上一层的上一个元素m[i-1][j-1]加上当前的这一个p[i][j]m[i][j]=m[i-1][j-1]+p[i][j];}else{  //在中间时,上一层就可以有两种选择if(m[i-1][j-1]+p[i][j]>m[i-1][j]+p[i][j]){m[i][j]=m[i-1][j-1]+p[i][j];}else{m[i][j]=m[i-1][j]+p[i][j];}}//cout<<"m["<<i<<"]["<<j<<"]"<<m[i][j]<<endl;if(m[i][j]>max){max=m[i][j];//cout<<"max:"<<max<<endl;}}//cout<<endl;}cout<<max<<endl;}return 0;}