1015. 摘花生

f(i, j) 表示从(1, 1)走到(i, j) 的所有走法集合,存储集合中的路线中能够拿到的最大的花生数目。
f(i, j) 可以被不重不漏的分成两个部分:

  1. 从i - 1, j向南走一步到i, j的所有走法
  2. 从i, j - 1向东走一步到i, j的所有走法

所以有:\(f(i, j) = max(f(i - 1, j), f(i, j - 1)) + f(i, j)\)

#include<iostream>
using namespace std;

const int N = 110;
int f[N][N];
int r, c;

int main(){
    int T;
    cin >> T;
    
    while(T --){
        cin >> r >> c;
        
        for(int i = 1; i <= r; i ++)
            for(int j = 1; j <= c; j ++)
                cin >> f[i][j];
        
        for(int i = 1; i <= r; i ++)
            for(int j = 1; j <= c; j ++)
                f[i][j] = max(f[i - 1][j], f[i][j - 1]) + f[i][j];
                
        cout << f[r][c] << endl;
    }
    
    return 0;
}
posted @ 2020-09-03 18:45  yys_c  阅读(152)  评论(0编辑  收藏  举报