标签:
描述:
在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的:
有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?
代码:
#include<stdio.h> #include<string.h> #include<iostream> #include<stdlib.h> #include <math.h> #define N 105 using namespace std; int height,tree[N][N],dp[N][N]; int main(){ int testcase; scanf("%d",&testcase); while ( testcase-- ){ scanf("%d",&height); memset(dp,0,sizeof(dp)); for( int i=0;i<height;i++ ){ for( int j=0;j<i+1;j++ ){ scanf("%d",&tree[i][j]); } } for( int i=height-1;i>=0;i-- ){ for( int j=0;j<i+1;j++ ){ dp[i][j]=tree[i][j]+max(dp[i+1][j],dp[i+1][j+1]); } } printf("%d\n",dp[0][0]); } system("pause"); return 0; }
标签:
原文地址:http://www.cnblogs.com/lucio-yr/p/4716740.html