计算一个矩阵从左上角到右下角和最大
2016-04-03 00:02
260 查看
有一个M行N列的矩阵,其中部分格子里面有一些有价值的物品。
现在你从左上角出发,每次只能想右或者向下走。
走到右下角的时候,你能获取的物品的总价值最大有多少?
输入数据:
第一行有两个数字M N,表示这个矩阵有M行N列。
然后从第二行开始,有M行整数,每行都有N个非负整数,表示这一格的物品价值。
输出数据:
可以获取的最大的物品总价值
数据范围:
示例:
输入
4 5
0 0 8 0 0
0 0 0 9 0
0 7 0 0 0
0 0 6 0 0
输出:
17
此题考查的是DFS的思想,本人水平太差,是问的同学才知道的,下面是代码:
运行结果:
此题为腾讯的笔试题,最终版权归腾讯所有。
现在你从左上角出发,每次只能想右或者向下走。
走到右下角的时候,你能获取的物品的总价值最大有多少?
输入数据:
第一行有两个数字M N,表示这个矩阵有M行N列。
然后从第二行开始,有M行整数,每行都有N个非负整数,表示这一格的物品价值。
输出数据:
可以获取的最大的物品总价值
数据范围:
0<M,N<=1000, 矩阵中的字数不会超过1000
示例:
输入
4 5
0 0 8 0 0
0 0 0 9 0
0 7 0 0 0
0 0 6 0 0
输出:
17
此题考查的是DFS的思想,本人水平太差,是问的同学才知道的,下面是代码:
#include<iostream> #include<vector> using namespace std; vector<vector<int> >A; int N, M; int max(int i, int j) { return i > j ? i : j; } int dfs(int i, int j) { if (i == N || j == M) return 0; else if (i == N - 1 && j == M - 1) return A[i][j]; else return max(dfs(i + 1, j), dfs(i, j + 1)) + A[i][j]; } void init() { int t; vector<int>X; while (cin >> N >> M) { for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { cin >> t; X.push_back(t); } A.push_back(X); X.clear(); } cout << dfs(0, 0) << endl; A.clear(); } } int main() { init(); }
运行结果:
此题为腾讯的笔试题,最终版权归腾讯所有。
相关文章推荐
- 《Linux内核分析》 第六节 分析Linux内核创建一个新进程的过程
- PHP错误处理函数
- PHP中的Trait 特性及作用
- PHP命名空间和自动加载类
- PHP preg match正则表达式函数的操作实例
- js一维数组、多维数组和对象的混合使用方法
- 基于JavaScript实现 网页切出 网站title变化代码
- 深入浅析JSON.parse()、JSON.stringify()和eval()的作用详解
- AngularJs 60分钟入门基础教程
- Node.js 应用跑得更快 10 个技巧
- jQuery qrcode生成二维码的方法
- 再次谈论React.js实现原生js拖拽效果引起的一系列问题
- jQuery中的Deferred和promise 的区别
- Angular 根据 service 的状态更新 directive
- 总结我的程序员之路 – 毕业找工作
- 为什么锤子聚集了一批聪明且有品味的人,其手机却不能大卖?
- 布斯为何拒绝苹果30周年大庆:专注未来,而不是过去
- 这个怪招可让你的iPhone释放几个GB的空间
- 射鸡师,干了这碗鸡汤我们继续改稿好不好?
- 让人了无牵挂 死亡APP提前料理身后事