Ep 1:
数塔问题(ZJNU OJ——1155)
在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的:
有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?
已经告诉你了,这是个DP的题目,你能AC吗?
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int aMaxSum[101][101],D[101][101],n;
int MaxSum(int r,int j){
if(r==n) return D[r][j];
if(aMaxSum[r+1][j]==-1)
aMaxSum[r+1][j]=MaxSum(r+1,j);
if(aMaxSum[r+1][j+1]==-1)
aMaxSum[r+1][j+1]=MaxSum(r+1,j+1);
if(aMaxSum[r+1][j]>aMaxSum[r+1][j+1])
return D[r][j]+aMaxSum[r+1][j];
return D[r][j]+aMaxSum[r+1][j+1];
}
int main(){
int T,i,j;
int sum;
cin>>T;
while(T--){
for(i=1;i<=100;i++)
for(j=1;