每日算法打卡:摘花生 day 14

文章目录

原题链接

1015. 摘花生

题目难度:简单

题目来源:《信息学奥赛一本通》

题目描述

Hello Kitty想摘点花生送给她喜欢的米老鼠。

她来到一片有网格状道路的矩形花生地(如下图),从西北角进去,东南角出来。

地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生,经过一株花生苗就能摘走该它上面所有的花生。

Hello Kitty只能向东或向南走,不能向西或向北走。

问Hello Kitty最多能够摘到多少颗花生。

输入格式

第一行是一个整数T,代表一共有多少组数据。

接下来是T组数据。

每组数据的第一行是两个整数,分别代表花生苗的行数R和列数 C。

每组数据的接下来R行数据,从北向南依次描述每行花生苗的情况。每行数据有C个整数,按从西向东的顺序描述了该行每株花生苗上的花生数目M。

输出格式

对每组输入数据,输出一行,内容为Hello Kitty能摘到得最多的花生颗数。

数据范围

1≤T≤100,

1≤R,C≤100,

0≤M≤1000

输入样例:
复制代码
2
2 2
1 1
3 4
2 3
2 3 4
1 6 5 
输出样例:
复制代码
8
16 

题目分析

这道题的意思就是要选择一条能摘到最多花生的数量的路线

对于这道题来说,我们依旧采用集合的思想来考虑,因为地图是二维的,所以我们考虑采用二位数组,f[i][j]他代表着走到第i,j位置的所有路线的最大值

从状态计算的角度来看,也就是集合划分,因为到达i,j的路线只有两种路线,一种是从i-1,j到i,j的位置,也就是从上到下,第二种就是从左到右走的

那么对于第i,j位置的结果就是

f ( i , j ) = max ⁡ { f ( i − 1 , j ) , f ( i , j − 1 ) } + w i , j f(i,j)=\max\{f(i-1,j),f(i,j-1)\}+w_{i,j} f(i,j)=max{f(i−1,j),f(i,j−1)}+wi,j

这里其实隐藏了一个初始化问题,就是边界情况,但是由于是要取最大值,恰好省略了,在其他DP问题是一定要分析初始化和边界问题的,其次是在递推的过程种,按照什么样的顺序计算呢,因为每一次算i,j时都需要知道之前的两个数值,这是可以画出一个有向图的,这里的顺序就是要按照拓扑序来计算,这道题按照数组遍历就恰好满足

示例代码

cpp 复制代码
#include<iostream>
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]<<'\n';
    }
}
相关推荐
csdn_aspnet42 分钟前
C/C++ 两个凸多边形之间的切线(Tangents between two Convex Polygons)
c语言·c++·算法
数据皮皮侠1 小时前
中国城市间地理距离矩阵(2024)
大数据·数据库·人工智能·算法·制造
3GPP仿真实验室1 小时前
深度解析基站接收机核心算法:从 MRC 到 IRC 的空间滤波演进
算法
Boop_wu1 小时前
[Java 算法] 动态规划(1)
算法·动态规划
WolfGang0073211 小时前
代码随想录算法训练营 Day18 | 二叉树 part08
算法
hanlin032 小时前
刷题笔记:力扣第43、67题(字符串计算)
笔记·算法·leetcode
yang_B6212 小时前
最小二乘法 拟合平面
算法·平面·最小二乘法
放下华子我只抽RuiKe52 小时前
深度学习全景指南:硬核实战版
人工智能·深度学习·神经网络·算法·机器学习·自然语言处理·数据挖掘
吴秋霖3 小时前
【某音电商】protobuf聊天协议逆向
python·算法·protobuf
m0_587958953 小时前
C++中的命令模式变体
开发语言·c++·算法