京东2015在线笔试 (1)

题目

这是京东商城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~~~

看了多遍,百思不得其解~~~

有大牛知道为什么的话,烦请告知! 谢谢~

注:题目是听朋友描述,记录下来,日后参考!

原文地址:https://www.cnblogs.com/shine-yr/p/5214845.html