题目
这是京东商城2015年,研发类在线笔试程序设计第一题,题目描述如下:
公司年终奖送礼品,小明要领取最多的礼物。领取方式如下:公司礼品放在一个6*6的二维矩阵式宫格中,每人从左上角为起点出发,每走一步可取走该格内的礼物,走到右下角位置,每次只能向右或向下走一步!
给定测试数据如下:
输入:一个6*6的矩阵
200 120 400 150 180 300
150 250 360 120 200 130
350 300 250 100 500 260
100 150 260 320 100 150
500 130 260 100 200 170
160 100 250 200 600 200
输出: 3100
分析
这是类似于LeetCode中55 JumpGame的一道题目,算法思想即是动态规划;
代码
#include <iostream>
#include <cstdlib>
#include <vector>
#include <algorithm>
using namespace std;
int getMax(const vector<vector<int> > &v)
{
if (v.empty())
return 0;
int m = v.size();
int n = v[0].size();
vector<vector<int> > maxV(m,vector<int>(n,0));
//处理首行
maxV[0][0] = v[0][0];
for (int j = 1; j < n; j++)
maxV[0][j] = maxV[0][j-1] + v[0][j];
//处理首列
for (int i = 1; i < m; i++)
maxV[i][0] = maxV[i-1][0] + v[i][0];
for (int i = 1; i < m; i++)
{
for (int j = 1; j < n; j++)
{
maxV[i][j] = max(maxV[i][j - 1], maxV[i - 1][j]) + v[i][j];
}//for
}//for
return maxV[m-1][n-1];
}
int main()
{
vector<vector<int> > v = { { 200, 120, 400, 150, 180, 300 }, { 150, 250, 360, 120, 200, 130 }, {350,300,250,100,500,260},
{ 100, 150, 260, 320, 100, 150 }, { 500, 130, 260, 100, 200, 170 }, {160,100,250,200,600,200} };
//vector<vector<int> > v(6, vector<int>(6, 0));
/*int temp;
for (int i = 0; i < 6; i++)
{
for (int j = 0; j < 6; j++)
{
cin >> temp;
v[i][j] = temp;
}
}*/
cout << getMax(v) << endl;
system("pause");
return 0;
}
忧伤的是,京东的OJ结果竟然是 80% 的正确率,并没有完全AC~~~
看了多遍,百思不得其解~~~
有大牛知道为什么的话,烦请告知! 谢谢~
注:题目是听朋友描述,记录下来,日后参考!