AcWing 1015. 摘花生(线性DP)

题目链接


题目描述

Hello Kitty想摘点花生送给她喜欢的米老鼠。
她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南角出来。
地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生,经过一株花生苗就能摘走该它上面所有的花生。
Hello Kitty只能向东或向南走,不能向西或向北走。
问Hello Kitty最多能够摘到多少颗花生。

题目模型

  • 集合表示:f(i,j)
  • 集合含义:所有从(1,1)走到(i,j)的路线
  • 集合属性:max
  • 集合划分:

题目代码

#include <iostream>
#include <algorithm>

using namespace std;

const int N = 110;

int n, m;
int w[N][N];
int f[N][N];

int main()
{
    int T;
    cin >> T;
    while(T -- )
    {
        cin >> n >> m;
        for(int i = 1; i <= n; i ++ )
            for(int j = 1; j <= m; j ++ )
                cin >> w[i][j];
        
        for(int i = 1; i <= n; i ++ )
            for(int j = 1; j <= m; j ++ )
                f[i][j] = max(f[i - 1][j], f[i][j - 1]) + w[i][j];
        
        cout << f[n][m] << endl;
    }
    return 0;
}
posted @ 2022-04-09 20:03  esico  阅读(52)  评论(0)    收藏  举报