有一个M行N列的矩阵,其中部分格子里面有一些有价值的物品。
现在你从左上角出发,每次只能想右或者向下走。
走到右下角的时候,你能获取的物品的总价值最大有多少?
输入数据:
第一行有两个数字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();
}
运行结果:
此题为腾讯的笔试题,最终版权归腾讯所有。