很多东西都忘了,现查的一些概念。如果理解不错的话:
首先,好消息是你的算法是对的。搜了下“DP的数字三角形问题”,以及对照你的代码,那个递归函数,如果理解没错的话,这路径是有限制的,上层到下层的时候,是只有两个位置可以选的。如你程序中写的,当i增加一(走到下一行)时,j可取的值是 原j值或者j+1。
而你for循环中输出的save_max[k],从它上面的计算中看出它取的值是这一整行所有值中的最大值。
这两种是有差别的,后一种情况相当于从i行到i+1行时,可以随意到任何列。而所谓的“DP的数字三角形问题”的则是有路径规则限制的。
所以比较宽泛的那个得出的结果是大于等于正确值的。calc:调用你的max_num()函数输出的是正确的。而std:输出的并非“DP的数字三角形问题”的,而是宽泛的所有行的最大值之和。
算法上你是对的,但是,不知道你是不是之前用的其他语言。你这程序语法上有几个小问题。一是数组定义似乎那个N得是常量值吧(如这样:const int N =5;)。另一个save_max的定义应该是N+1个,因为你程序里的角标都是从1到N的。