动态规划的一个简单列子

来源:互联网 发布:淘宝卖家店铺装修教程 编辑:程序博客网 时间:2024/05/22 02:22

问题:
有一个矩阵map,它每个格子有一个权值。从左上角的格子开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,返回所有的路径中最小的路径和。
* 给定一个矩阵map及它的行数n和列数m,请返回最小路径和

分析:
设dp[n][m]为走到n*m位置的路径长度,那么显而易见dp[n][m] = min(dp[n-1][m],dp[n][m-1]);

代码:

public class Dynamaic {    public static void main(String[] args) {        int[][]  map={{2,6,9},{3,7,1},{9,2,7}};        int [][] dump = new int[3][3];        //设置第一行        for(int xi=0;xi<3;xi++){            for(int yi=0;yi<=xi;yi++){                dump[0][xi] +=map[0][yi];            }        }        //设置第一列        for(int xi=0;xi<3;xi++){            for(int yi=0;yi<=xi;yi++){                dump[xi][0] +=map[yi][0];            }        }        dump[0][0] = map[0][0]; //因为上边两个for循环重复计算了dump[0][0]、所以这里重置。        //用公式求解        for(int xi=1;xi<3;xi++){            for(int yi=1;yi<3;yi++){                dump[xi][yi] = min(dump[xi-1][yi]+map[xi][yi],dump[xi][yi-1]+map[xi][yi]);            }        }        System.out.println(dump[2][2]);    }    public static int min(int x,int y){        return x>y?y:x;    }}