【动态规划】求二维数组从左下到右上的最优路径
来源:互联网 发布:gps轨迹保存数据库 编辑:程序博客网 时间:2024/04/29 09:14
1.求二维数组从左下到右上的最优路径,使得路径和最大,并且只能向上或向下走。
解析:求最短路径,路径和最优等都可以用动态规划做。
dp[i][j]表示到i,j坐标的最优路径。
第一,确定初始条件。即向上向左的最优路径确定
dp[i,0] = dp[i-1,0] + arr[i][0] where j =0
dp[0,j] = dp[0,j-1] + arr[0][j] where i =0
第二,根据初始条件,迭代出整个数组。
dp[i,j] = max{dp[i+1,j],dp[i,j-1]} + arr[i][j]
第三,dp[0,m]即是最优路径的值。
//求从二维数组左下到右上的路径,最大值。//只可以向右向上走,二维数组值已给定。int getmax(int a[][5],int n){ int i,j,k,t; int tmp,rtn; int** ta = (int**)malloc(sizeof(int)*n*n); ta[0]=(int *)malloc(n*n*sizeof(int)); for(int i=1;i<n;i++) ta[i]=ta[0]+i*n; //------核心代码--------------------------------------------- //第一阶段,为第二阶段的递推铺垫 ta[n-1][0] = a[n-1][0]; for (i=n-2,j=1;i>=0&&j<n;i--,j++) //求出(N,j)和(i,N)列的最大值 { ta[n-1][j] = a[n-1][j] + ta[n-1][j-1]; ta[i][0] = a[i][0] + ta[i+1][0]; } //第二阶段 for (i = n-2,j = 1;i>=0&&j<n;i--,j++) { for (k = j;k<n;k++) { tmp = ta[i+1][k] > ta[i][k-1]? ta[i+1][k]:ta[i][k-1]; ta[i][k] = a[i][k] + tmp; } for(t=i;t>=0;t--) { tmp = ta[t+1][j] > ta[t][j-1]? ta[t+1][j]:ta[t][j-1]; ta[t][j] = a[t][j] + tmp; } }//------核心代码-------------------------------------------- for (i=0;i<5;i++) { for(j=0;j<5;j++) { cout << ta[i][j] << " "; } cout << endl; } rtn = ta[0][n-1]; delete []ta;ta = NULL; return rtn;}
测试用例:
void main(){ int a[5][5]; int i,j; for (i=0;i<5;i++) { for(j=0;j<5;j++) { a[i][j] = rand()%50; } } for (i=0;i<5;i++) { for(j=0;j<5;j++) { cout << a[i][j] << " "; } cout << endl; } cout << getmax(a,5) << endl;}
0 0
- 【动态规划】求二维数组从左下到右上的最优路径
- 二维数组右上左下遍历
- 二维数组右上左下遍历
- 二维数组右上左下遍历
- 笔试算法题解析--二维数组右上到左下打印
- 【OpenJudge】二维数组右上左下遍历
- 21:二维数组右上左下遍历
- 【动态规划】求二维数组走法路径种数
- 百练noi21:二维数组右上左下遍历,24:蛇形填充数组
- 21:二维数组右上左下遍历(1.8编程基础之多维数组)
- 二维数组右上左下遍历(C程序设计进阶第5周)
- [土狗之路]coursera C语言进阶习题 二维数组右上左下遍历
- 指针与二维数组练习-二维数组右上左下遍历(C程序设计进阶 第5周)
- 校oj1085 计算从左下到右上有多少不同走法
- [编程题]在一个N*N的数组中寻找所有横,竖,左上到右下,右上到左下,四种方向比较
- 据说是菊花机试题:求最小长方形的左下右上坐标
- 二维数组右上左下遍历 (Coursera 程序设计与算法 专项课程2 C程序设计进阶 李戈;OpenJudge)
- Minimum Path Sum 求方格总从左上到右下的最短路径 简单动态规划
- JAVA_SE基础——34.static修饰成员变量
- Java文件操作1
- Python基本数据类型详细介绍
- REST与RESTful的学习
- angular uigrid 的cell button click 事件无效
- 【动态规划】求二维数组从左下到右上的最优路径
- ios- 地图路线规划
- Hadoop学习笔记一
- JavaScript高级程序设计之函数表达式之模仿块级作用域第7.3讲笔记
- 本人对大脑的一些思考——思维方式图像化
- OL2中的多地图联动展示
- poj1780
- 【动态规划】求一维子数组的最大和
- 分布式一致性协议Raft原理与实例