动态规划求解从矩阵左上角到右下角的最大受益问题
2016-04-02 22:02
381 查看
今天参加了腾讯在线笔试,题目不是很难,但是自己做的不好,前面的有些知识点是自己不太熟悉,属于不用就忘,仅仅回想起一点肯定是不够用的。
以前一直以为,到大学之后,所有知识点都可以不再记了,会用就好(用多了确实就记住了),或者用过之后,有个印象,到再需要用的时候再”找回来”就可以了。但是很多知识点是不会经常用的,而真正用到的时候,再去”找回来”成本其实还挺高的,甚至还要付出很大的代价(比如考试的时候)。所以对于不常用的知识点还是需要偶尔复习复习。
今天编程题,最后一道是动态规划的,当时没弄出来,等到结束之后,马上打开eclipse,几分钟就搞定了。下面总结一下这个题,也算复习一下动态规划。
题目:
输入一个矩阵num[m]
,现在从左上角(num[0][0])到达右下角num[m-1][n-1],且只能向下或者向右走。定义经过的所有点的数字之和为该条路径的收益,求到达右下角的最大收益。
求解:
用动态规划的方法,从左上角开始,计算到达每一个点的最大收益。
今天写下来,也算是为自己总是不喜欢做笔记提个醒吧。另外也提醒自己应该多复习复习学过的知识点。像这种面试题,你说不会吧,其实基本都会,但是你写不出来(特别是在考试的时候写不出来)就等于不会。就算学习能力强也没什么用。
以前一直以为,到大学之后,所有知识点都可以不再记了,会用就好(用多了确实就记住了),或者用过之后,有个印象,到再需要用的时候再”找回来”就可以了。但是很多知识点是不会经常用的,而真正用到的时候,再去”找回来”成本其实还挺高的,甚至还要付出很大的代价(比如考试的时候)。所以对于不常用的知识点还是需要偶尔复习复习。
今天编程题,最后一道是动态规划的,当时没弄出来,等到结束之后,马上打开eclipse,几分钟就搞定了。下面总结一下这个题,也算复习一下动态规划。
题目:
输入一个矩阵num[m]
,现在从左上角(num[0][0])到达右下角num[m-1][n-1],且只能向下或者向右走。定义经过的所有点的数字之和为该条路径的收益,求到达右下角的最大收益。
求解:
用动态规划的方法,从左上角开始,计算到达每一个点的最大收益。
/** * 用动态规划方法计算: * 用一个数组result[i][j]保存每一个点i,j的最大收益 * num[i][j], i=j=0 * result[i][j]=result[i][j-1]+num[i][j], i=0,j!=0 * result[i-1][j]+num[i][j], j=0,i!=0 * Max(result[i-1][j],result[i][j-1])+num[i][j], i!=0,j!=0 * * @param num 非空数组num * @return */ public static int[][] getMax(int[][] num){ int m=num.length; if(m==0){//说明数组num为空 return new int[0][0]; } int n=num[0].length; int[][] result=new int[m] ; for(int jj=0;jj<n;jj++){ for(int ii=0;ii<m;ii++){ if(ii==0 && jj==0){ result[ii][jj]=num[ii][jj]; continue; } if(jj==0){ result[ii][jj]=result[ii-1][jj]+num[ii][jj]; continue; } if(ii==0){ result[ii][jj]=result[ii][jj-1]+num[ii][jj]; continue; } int maxIJ=Math.max(result[ii][jj-1],result[ii-1][jj]); result[ii][jj]=maxIJ+num[ii][jj]; } } return result; }
今天写下来,也算是为自己总是不喜欢做笔记提个醒吧。另外也提醒自己应该多复习复习学过的知识点。像这种面试题,你说不会吧,其实基本都会,但是你写不出来(特别是在考试的时候写不出来)就等于不会。就算学习能力强也没什么用。
相关文章推荐
- ICE 超过最大连接数崩溃的问题
- SQL Cursor 基本用法
- 基于WindowsIocp及Duilib的服务器
- java jdbc如何使用
- JZOJ4419. 【GDOI2016模拟4.2】hole
- JavaScript继承
- TCP KeepAlive
- PHPStorm安装与破解
- 冒泡排序
- js--面向对象--原型链
- LeetCode题解--7. Reverse Integer
- javascript中的后退和刷新
- a毛 jquery 学习记 2(上) “jquery学习方法 英文网页怎么看”
- JavaWeb基础---Java序列化
- 同步
- ACM程序设计选修课——1041: XX's easy problem(神烦的多次字符串重定向处理)
- MFC-缩放位图
- 欢迎使用CSDN-markdown编辑器
- Arcgis+ArcEngine+Java开发软件安装配置问题
- C实现heap堆排序