数字三角形问题c语言,数字三角形问题 算法
给定一个由n行数字组成的数字三角形,如下图所示。尝试设计一个算法,计算一条从三角形的顶部到底部的路径,使通过该路径的数字之和最大化。
对于一个给定的由n行数字组成的数字三角形,计算通过从三角形顶部到底部的路径的数字之和的最大值。
输入格式:输入数据的第一行是数字三角形的个数n,1n100。接下来的n行是数字三角形每一行中的数字。所有数字都在0之间.99.
输出格式:输出数据只有一个整数,表示计算的最大值。
//动态编程:用一个数组记录所有已解决的子问题的答案,不考虑子问题以后是否会用到。只要它被计算过,它的结果就会存储在数组中。
//数字三角形
#包含stdio.h
int main()
{
int n,I,j;
scanf(%d ,
int a[101][101];
for(I=1;我我)
{
for(j=1;j j)
{
scanf(%d ,a[I][j]);//用二维数组存储数据
}
}
int s[101][101];//存储从第I行第j个数字到底部的最佳路径上的数字之和。
for(j=1;j j)
{
s[n][j]=a[n][j];
}
for(I=n;我我-)
{
for(j=1;j j)
{
如果(i==n)
{
s[I][j]=a[I][j];
}
其他
{
if(s[i 1][j]=s[i 1][j 1])
{
s[I][j]=s[I 1][j]a[I][j];
}
其他
{
s[I][j]=s[I 1][j 1]a[I][j];
}
}
}
}
printf(%d\n ,s[1][1]);
返回0;
}
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。