2018-02
这个题目有点类似leetcode上面的,62和63题。
题目:给定一个M行N列的矩阵(M*N个格子),每个格子中放着一定数量的平安果。你从左上角的各自开始,只能向下或者向右走,目的地是右下角的格子。每走过一个格子,就把格子上的平安果都收集起来。求你最多能收集到多少平安果。注意:当经过一个格子时,需要一次性把格子里的平安果都拿走。限制条件:1<N,M<=50;每个格子里的平安果数量是0到1000(包含0和1000).
输入描述:输入包含两部分:第一行M, N接下来M行,包含N个平安果数量
输出描述:一个整数最多拿走的平安果的数量
示例:
输入
2 4
1 2 3 40
6 7 8 90
输出
136
程序如下:
int maxApples(vector<vector<int>>& apples) { int m = apples.size(); int n = apples[0].size(); if (m < 1 || n < 1) return 0; vector<vector<int>> d(m,vector<int>(n,0)); d[0][0] = apples[0][0]; for (int j = 1; j < n; j++) d[0][j] = d[0][j - 1] + apples[0][j]; for (int i = 1; i < m; i++) d[i][0] = d[i - 1][0] + apples[i][0]; for (int i = 1; i < m; i++) { for (int j = 1; j < n; j++) { d[i][j] = max(d[i - 1][j], d[i][j - 1]) + apples[i][j]; } } return d[m-1][n-1]; } int main() { int m = 0; int n = 0; cin >> m; cin >> n; vector<vector<int>> apples(m,vector<int>(n,0)); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { cin >> apples[i][j]; } } cout << maxApples(apples); return 0; }

浙公网安备 33010602011771号