2017年4月21日华为笔试题 圣诞的祝福

题目:

2017年4月21日华为笔试题 圣诞的祝福_第1张图片

2017年4月21日华为笔试题 圣诞的祝福_第2张图片

2017年4月21日华为笔试题 圣诞的祝福_第3张图片


感觉这题很简单,直接一个动态规划的备忘录就解决了。

如果运行出现数组越界的情况,有2种情况

第一,访问了类似ans[-1][3]或者ans[3][-1]这样的

第二,数组刚好开小了一点点,然后当m=50,n=50的时候刚好越界

代码:

#include 
using namespace std;

int m, n, num[50][50], ans[50][50];

int f(int row, int line)
{
	if (ans[row][line] >= 0)return ans[row][line];
	if (row == 0 && line == 0)return num[0][0];
	if (row == 0)ans[row][line] = f(row, line - 1) + num[row][line];
	else if (line == 0)ans[row][line] = f(row - 1, line) + num[row][line];
	else
	{
		ans[row][line] = f(row, line - 1) + num[row][line];
		int k = f(row - 1, line) + num[row][line];
		if (ans[row][line] < k)ans[row][line] = k;
	}
	return ans[row][line];
}

int main()
{
	cin >> m >> n;
	for (int i = 0; i < m; i++)for (int j = 0; j < n; j++)
	{
		cin >> num[i][j];
		ans[i][j] = -1;
	}
	cout << f(m - 1, n - 1);
	return 0;
}

你可能感兴趣的:(2017年4月21日华为笔试题 圣诞的祝福)