数字三角形问题

来源:互联网 发布:矩阵的奇异值定义 编辑:程序博客网 时间:2024/06/05 08:25

如有错误请批评指出,谢谢!

问题描述:给定一个由n行数字组成的数字三角形,如下图所示。试设计一个算法,计算出从三角形顶至底的一条路径,使得该路径经过的数字之和最大。



         7
       3   8
     8   1   0
   2   7   4   4
 4   5   2   6   5


算法设计:对于给定由n行数字组成的数字三角形,计算出从三角形顶至底的路径经过的数字之和最大。

思路:用动态规划,核心代码:n=a[i][j]+a[i-1][j-1];m=a[i][j-1]+a[i-1][j-1];a[i-1][j-1]=exchange(n,m); 例如:以一二行为例 n=7+3=10;m=7+8=15;则a[0][0]=15

代码:

#include<iostream.h>
int a[20][20];
int i,j,k,sum=0;
int exchange(int &a,int &b)
{
return (a>b?a:b);
}
void main()
{
cout<<"输入n(三角形的行数)"<<endl;
cin>>k;
cout<<"输入数字三角形"<<endl;
for(i=0;i<k;i++)
for(j=0;j<=i;j++)
{
cin>>a[i][j];
}
for(i=k-1;i>=0;i--)
{
for(j=i;j>=0;j--)
{
int n,m;
n=a[i][j]+a[i-1][j-1];
m=a[i][j-1]+a[i-1][j-1];
a[i-1][j-1]=exchange(n,m);
}
}
cout<<a[0][0]<<endl;
}

0 0