路径所经过的数字的最大的总和
时间限制: 0 Sec 内存限制: 128 MB
题目描述
示出了一个数字三角形。 请编一个程序计算从顶至底的某处的一条路 径,使该路径所经过的数字的总和最大。 每一步可沿下方向下或右下方向下走; 1< 三角形行数< 25; 三角形中的数字为整数< 1000;
输入
第一行为N,表示有N行 后面N行表示三角形每条路的路径权
输出
路径所经过的数字的总和最大的答案
样例输入
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
样例输出
30
提示
搜索80分,记忆化搜索AC
#include <bits/stdc++.h>
using namespace std;
int a[108][108],b[108][108];
int m,n;
int maxsum(int i,int j)
{
/*if(b[i][j]!=0)
return b[i][j];*/
//不加这个会导致重复计算 可能会超时
if(i==n)
return a[i][j];
int x,y,t;
x=maxsum(i+1,j);
y=maxsum(i+1,j+1);
t=max(x,y);
return b[i][j]=t+a[i][j];
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
cin>>a[i][j];
}
}
memset(b,0,sizeof(b));
maxsum(1,1);
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
cout<<b[i][j]<<" ";
}
cout<<endl;
}
cout<<b[1][1]<<endl;
return 0;
}