主题说明:
计算从三角形顶部到底部的路径,使路径通过的数字总和最大化。 每个数字可以选择左或右下方向。 例如,下图中的"3"可以选择数字"8"或"1",但不能选择数字"0"和数字"9"。)。
7
3() ) ) ) ) ) ) ) )0)
8 1 0
() )
526 ) ) ) ) )
注意:
1、不要选择每层中数值最大的。
2、在满足条件的路径中,而不是选择数值最大的路径。
3、上面两种说法有区别。
PS :
第一次看到这个主题,也许可以理解为注意事项的第一点,但仔细想想这个错误的理解,
换个说法,实际上被错误地理解为注意事项中的第二点。 通过很好地利用这两个错误,可以实现以下算法。
算法:
如果这个三角形只有一个数字,结果就是:
如果这个三角形只有3个数字,那么结果是: max(,)
如果这个三角形只有6个数字,那么结果是:max(max(, ),max ), ) )
代码实现:
#包含
#包含
#包含
#define MAX 100 1
#define Route '/home/wahaha/桌面/123 '
using namespace std;
int num[MAX][MAX],n; //n代表层数h代表行数l代表列数
intway(inth,int l ) )。
{
return h==n? num [ h ] [ l ] 3360 num [ h ] [ l ] max (way (h1,l ),way (h1,l 1 ) );
}
入主(void ) )。
{
memset(num,0,sizeof ) num );
freopen(route,' r ',stdin );
wile(Cinn ) )。
{
for(inth=1; h=n; h )
for(intL=1; l=h; l () ) ) ) ) )。
cinnum[h][l];
计数(1,1 ) )。
}
返回0;
}