题目大意:

输入一个m*n的矩阵,按每步走右上、右下、正右(三种选择)的方法,完成从第一列(任何行)走到最后一列。每步的消费是输入的矩阵元素值。注意,规定最后一行跟头一行是相邻的(即可以相互走到)。

 

要求输出 字典序最小(若有多种)的路径,路径用每步所在行表示。行列都从1开始计算。输入 1<=m<=10, 1<=n<=100。

输出结果不超出int32。

 

注意:①A path starts anywhere in column 1.

         ② lexicographically smallest should be output.

         ③The first and last rows (rows 1 and m) of a matrix are considered adjacent, i.e., the matrix ``wraps'' so that it represents a horizontal cylinder.

 

题目类型:dp

 

分析:

①做这题的时候正好碰到UvaOj崩溃(详见),很不爽。

之前的一直TEL,搞不懂神马情况(还把别人AC的代码拿来跟我的测速了,结果还是我的快啊!)。虽然开始的代码写得比较挫,但是复杂度神马的都没问题啊,难道漏了某个边界数据造成死循环?难道某些数据,我的寻路print_path的方法会耗很多时间?烦,暂时不想去理。

 

②把dp部分改了改,让它适合直接记录下一个结点的位置于next_row数组中(想节省掉打印路径的时间),然后就是无奈地等UvaOj从崩溃中wake up...我擦,它服务器至少崩溃了10多个小时吧。交了,AC了。很无奈,以后再说吧,烦死了。

 

代码: