腾讯2016实习生笔试编程题,题记不太清了,大概意思是给定一个二维数组,存放着一些财宝,然后从坐标(0, 0)开始,即左上角,每次只能向右或向下移动一次,求移到右下角时的,收获的财宝最高为多少。
思路:回溯
#include <iostream>
using namespace std;
int max = 0;
void func(int (&arr)[4][5], int x, int y, int sum)
{
if (x < 5 && y < 4)
sum += arr[y][x];
else
return;
if (x == 4 && y == 3)
{
if (sum > max)
max = sum;
return;
}
if (x < 5)
func(arr, x + 1, y, sum);
if (y < 4)
func(arr, x, y + 1, sum);
}
int main()
{
int arr[4][5] = {
{0, 1, 4, 0, 2},
{3, 2, 1, 2, 0},
{0, 3, 0, 0, 1},
{0, 1, 1, 0, 0}
};
int sum = 0;
func(arr, 0, 0, sum);
cout << max << endl;
return 0;
}