问题 B: 2017夏令营第一阶段(Day3)问题B方格最短路径
题目描述
有一个N*M的方格,每个格子里有一个数字,你从左上角格子开始,每次可以向下或向右走到相邻的格子里,一直走到右下角,问怎样走线路的格子中的数字和最小,输出这个最小值?
输入
第一行:2个整数n,m,范围在[1, 100]。
下面n行,每行m个整数,每个数范围在[1, 100] 。
输出
路径上数字最小和。
样例输入
3 4
3 2 3 7
2 1 5 1
3 2 1 6
样例输出
15
一道经典到不能再经典的子问题!
这道题要我们消耗最少的体力,走完这个方格。
很多人一看到题目——哎呀我去!最短路,玩啥?但是仔细一看,这不就是子问题吗?
好的,废话少说,还是老样子,分析样例。
这是一个样例分析图,蓝色代表另一种走法。
3+2+1+2+1+6=15(分析正确)
如果联合行列的数据仔细看,是否发现一共只用走(n+m)步.(n行m列)
然后开始分析子问题:
我们设置当前的情况是f[i][j]
,能到达f[i][j]
是不是只有f[i][j-1]和f[i-1][j]
,
然后我们要求f[i][j-1]和f[i-1][j]
中的最小值,那么动态转移方程不就出来了?
f[i