计算一个矩阵从左上角到右下角和最大(DFS)
2017-04-25 21:23
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(); }
相关文章推荐
- 计算一个矩阵从左上角到右下角和最大
- 计算一个整形数组里的连续元素和的最大值
- 编写一个计算一维数组中所有整数的最大公约数的函数
- 作业题,编写两个类:A和B,A创建的对象可以计算两个正整数的最大公约数,B创建的对象可以计算两个数的最小公倍数,要求:B类中有一个成员变量是A类声明的对象
- 设M 是一个m×n 的矩阵,其中每行的元素从左到右单增有序,每列的元素从上到下单增有序。 给出一个分治算法计算出给定元素x 在M 中的位置或者表明x 不在M 中。分析算法的时间复杂性。
- 5*5的矩阵中最大的元素放在中心,写一个函数实现
- 大学时候想的一个算法——计算数组中最大和序列
- 求一个矩阵最大子矩阵的算法模板
- 一个求矩阵鞍点(即行上最小的数 同时是列上最大的数)的C程序
- 计算一个数组中最大子序列的和
- 求一个矩阵中最大的二维矩阵(元素和最大)
- 05年华中科大机试第二题(输入一个四行五列的矩阵,找出每列最大的两个数)
- 【100题】三十五 求一个矩阵中最大的二维矩阵(元素和最大)
- 求一个矩阵中最大的二维子矩阵(元素和最大)
- 计算一个字符串中最大的子串的长度,并将它返回。如“abc12345sdfsasdfsd”最大的子串是sdfsasdfsd
- 每天学习一算法系列(32)(求一个矩阵中最大的二维矩阵(元素和最大))
- 求一个矩阵中最大的二维矩阵(元素和最大)
- 【100题】三十五 求一个矩阵中最大的二维矩阵(元素和最大)
- 求一个矩阵中最大的二维矩阵(元素和最大)
- 求一个M*N的矩阵的最大子矩阵和。