最小路径和
#include <iostream> #include <algorithm> using namespace std; int mapx[3][5]= { 1,2,3,4,5, 6,7,8,9,1, 2,3,4,5,6 }; int dp[3][5]={0}; int main() { dp[0][0] = mapx[0][0]; for(int i=1;i<5;i++) { dp[0][i] = dp[0][i-1] + mapx[0][i]; } for(int i=1;i<3;i++) { dp[i][0] = dp[i-1][0] + mapx[i][0]; } for(int i=1;i<3;i++) { for(int j=1;j<5;j++) { dp[i][j] = min(dp[i-1][j],dp[i][j-1]) + mapx[i][j]; } } cout<<dp[2][4]<<endl; return 0; }
设置数组dp[i][j]用于表示从mapx[0][0]点到mapx[i][j]点的最短路径和;
考虑边界问题,既是两个边,要根据实际情况设置。比如这里的两个边dp[i][0],dp[0][j]分别表示从mapx[0][0]点到mapx[i][0]和mapx[0][i]的最短路径和,那么也就是沿着两条边线不断累加;
剩下的就是每走一部就比较下,向下走和向右走的哪一个划算,然后取哪一个;
最后,最右下角的值就是待求的最小路径和!
posted on 2018-09-17 10:54 HelloWorldTotti 阅读(173) 评论(0) 编辑 收藏 举报