摘花生c++

题目

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

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

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

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

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

1.gif

输入格式

第一行是一个整数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

思路1

         本题涉及到最优解,考虑使用DP(动态规划)来做。对于动态规划的题,从状态表示和状态计算两方面考虑。

        对于状态表示,又可以从集合定义和集合的属性两方面考虑。对于本题,我将集合f(i, j)定义为从某坐标(i, j)出发的所有路径,属性(即f(i, j)存的值)定义为摘到花生的最大数量。

        而状态计算对应着集合的划分。对于本题,可以按第一步往哪个方向走来划分集合,分为两个小的集合:第一步向东走的,第一步向南走的。假设用二维数组a存每个坐标的花生数量。对于第一步向东走的集合,路径为:(1, 1) ->(1, 2) ->……,第一步都是在(1, 1)这个坐标,那摘到的花生数可以设为f(1, 1) = m(1, 1) + f(1, 2)。同理,对于第一步向南走的集合,路径为:(1, 1) ->(2, 1) ->……,第一步都是在(1, 1)这个坐标,那摘到的花生数可以设为f(1, 1) = m(1, 1) + f(2, 1)。然后两个小集合的最大值即可得到整个集合的最大值。

        有人疑惑为什么这样可以摘到从西北角到东南角最大的花生数量。因为对于某个坐标,我们都会遍历东南两个方向,因此一定会到达东南角的。

代码1
#include<bits/stdc++.h>
using namespace std;

const int N = 110;
int t, r, c, m;

//a存各坐标花生数;total[i][j]存从(i, j)开始能获得的最大花生数量,为记忆化数组
int a[N][N], total[N][N];
int dx[] = {0, 1}, dy[] = {1, 0};

int dfs(int x, int y)
{
  int &v = total[x][y];

/*
对total[x][y]的各位取反,判断total[x][y]是否为-1,-1(1111 1111 1111 1111)取反后变为为0;
不为-1说明从(x, y)开始的路径已经遍历(记忆)过了,不需要重新遍历(记忆)
*/
  if (~v)
  return v;
  
  v = a[x][y];
  
  for (int i = 0; i < 2; i ++)
  {
    int nx = dx[i] + x, ny = dy[i] + y;
    //合理的坐标才能继续摘花生
    if (nx >= 1 && nx <= r && ny >= 1 && ny <= c)
    v = max(v, dfs(nx, ny) + a[x][y]);
  }

//遍历完两个方向后将结果v返回给上一层
  return v;
}

int main()
{
  cin >> t;
  while (t --)
  {
    /*
    因为某个坐标的花生数可能为0,因此要使用-1代表total[i][j]没有计算过从(i, j)开始能获得的最大花        生数量
    */
    memset(total, -1, sizeof total);
    cin >> r >> c;
    for (int i = 1; i <= r; i ++)
    for (int j = 1; j <= c; j ++)
    cin >> a[i][j];
    
    cout << dfs(1, 1) << endl;
  }
  
  return 0;
}

思路2

由于Hello Kitty只能向东或向南走,因此Hello Kitty到达某点坐标只能从西边或者北边来。那么我们可以将

  • 集合f(i, j)定义为:到达(i, j)的所有路径。
  • 属性:获得花生的最大数量。
  • 集合划分:从西边到达(i, j); 从北边到达(i, j)

        f(i, j) = a[i][j] + f(i, j - 1);
        f(i, j) = a[i][j] + f(i - 1, j);

代码2
#include<bits/stdc++.h>
using namespace std;
const int N = 110;
//a存各坐标花生数;f[i][j]存到达(i, j)能获得的最大花生数量
int a[N][N], f[N][N];

int main()
{
  int t, r, c;
  cin >> t;
  
  while (t --)
  {
    //由于有多组不同的数据,因此每次都要重置为0
    memset(f, 0, sizeof f);
    cin >> r >> c;
    for (int i = 1; i <= r; i ++)
    for (int j = 1; j <= c; j ++)
    cin >> a[i][j];
    
    for (int i = 1; i <= r; i ++)
    {
      for (int j = 1; j <= c; j ++)
      {
        f[i][j] = max(f[i][j - 1], f[i - 1][j]) + a[i][j];
      }
    }
    
    cout << f[r][c] << endl;
  }
  return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/439883.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

指针易错点(超详细)

&#x1f4cc; 博客主页 爆打维c 本文将介绍指针基本知识点及易错点&#xff0c;刚入门学习c语言的小伙伴们可以收藏起来&#xff0c;方便找到。 目录 一、指针是什么&#xff1f; 1.const修饰指针 总结: 2.野指针 野指针成因: 3.指针数组与数组指针的区别 3.1指针数…

数据分析师必备:五款数据可视化工具对比与推荐

在数字化时代&#xff0c;数据可视化产品成为了企业和个人进行数据分析、信息呈现的重要工具。市面上涌现了众多数据可视化产品&#xff0c;它们各具特色&#xff0c;功能各异。本文为大家简要介绍五款市面上热门的数据可视化产品。 一、Tableau Tableau是一款功能强大的数据…

精读《React Conf 2019 - Day2》

1 引言 这是继 精读《React Conf 2019 - Day1》 之后的第二篇&#xff0c;补充了 React Conf 2019 第二天的内容。 2 概述 & 精读 第二天的内容更为精彩&#xff0c;笔者会重点介绍比较干货的部分。 Fast refresh Fast refresh 是更好的 react-hot-loader 替代方案&am…

mysql日常优化的总结

文章目录 一、数据表结构相关优化建字段类型注意事项1. int类型的选择2.varchar、char、text类型3.date、datetime、timestamp类型 表规划1. 垂直分表2. 水平分表 二、查询语句优化1.对于字段多的表&#xff0c;避免使用SELECT *2.避免使用!操作符3.避免使用null做条件4.like查…

echarts中toolbox 中文乱码问题

问题描述 本地引用的echarts源文件&#xff0c;页面其他部分编码显示正常&#xff0c;唯独toolbox鼠标悬停在上面时提示信息显示乱码。 如图所示&#xff1a; 尝试过的方法 使用sublime text 3&#xff0c;notepad&#xff0c;记事本更改文件编码为utf-8引入时&#xff0c;在sc…

爱普生宣布开发出独特的宽幅度LVDS输出 —可灵活选择与LSI

爱普生宣布开发出独特的宽幅度LVDS输出 —可灵活选择与LSI -相匹配的低噪声输出 精工爱普生公司(TSE: 6724&#xff0c;“爱普生”)开发了一种新的晶体振荡器差分输出方案。新方案&#xff0c;宽幅低压差分信号(WA-LVDS)&#xff0c;可以灵活选择最适合LSI所需的幅值水平的输出…

双体系Java学习之浮点型,字符型,布尔型三种数据类型

浮点型 //小数&#xff1b;浮点数float num5 50.1F;//float类型要在数字后面加个Fdouble num6 3.1415926;字符型 char c1 a;char c2 中;System.out.println(c1);System.out.println((int) c1);//强制换行System.out.println(c2);System.out.println((int) c2);//强制换行//…

React报错 之 Objects are not valid as a React child

原文链接&#xff1a; 1、React报错之Objects are not valid as a React child 2、Objects are not valid as a React child error [Solved] 作者&#xff1a;Borislav Hadzhiev 以下文中涉及到的链接均来自于该作者&#xff0c;他写了很多相关的文章&#xff0c;可以多看看他的…

【大模型】Hugging Face下载大模型的相关文件说明

Hugging Face下载大模型文件说明 1.前言 ​ 上图是毛毛张在HuggingFace的官网上的ChatGLM-6B大模型的所有文件,对于初学者来说,对于上面的文件是干什么的很多小伙伴是很迷糊的,根本不知道是干什么的,毛毛张接下来将简单讲述一下上面的每个文件的作用。 2.文件说明 在Hug…

文献学习-14-一种用于高精度微创手术的纤维机器人

Authors: Mohamed E. M. K. Abdelaziz1,2 †, Jinshi Zhao1,3 †, Bruno Gil Rosa1,2 , Hyun-Taek Lee4 , Daniel Simon3,5 , Khushi Vyas1,2 , Bing Li6,7 , Hanifa Koguna3 , Yue Li1 , Ali Anil Demircali3 , Huseyin Uvet8 , Gulsum Gencoglan9,10, Arzu Akcay11,12, Moham…

Sora,OpenAI带来的视觉革新

目录 1、Sora&#xff1a;不只是一个视频生成工具 2、从文本到视频的魔法之旅 3、技术革命&#xff1a;从文本到视频的华丽转变 4、应用范围&#xff1a;无限的可能性 5、好用的GPT网站 ⭐ 想象一下&#xff0c;如果你可以仅通过敲击键盘&#xff0c;就能让你的思维火花转…

从根到叶:深入理解二叉搜索树

我们的心永远向前憧憬 尽管活在阴沉的现在 一切都是暂时的,转瞬即逝, 而那逝去的将变为可爱 &#x1f31d;(俄) 普希金 <假如生活欺骗了你> 1.二叉搜索树的概念 概念:搜索树&#xff08;Search Tree&#xff09;是一种有序的数据结构&#xff0c;用于存储和组…

2023第十届GIAC全球互联网架构大会:洞察未来互联网架构的革新与突破(附大会核心PPT下载)

随着互联网的迅猛发展&#xff0c;其底层架构的演进与革新成为了推动全球数字化进程的关键力量。2023年第十届GIAC全球互联网架构大会如期而至&#xff0c;汇聚了全球互联网架构领域的顶尖专家、学者、企业领袖和创新者&#xff0c;共同探讨和展望互联网架构的未来发展趋势。本…

【Logback】Logback 中的 Appenders

目录 1、什么是 Appenders&#xff1f; 2、解说 AppenderBase.doAppend() 方法 3、logback-core 模块中的 Appenders &#xff08;1&#xff09;OutputStreamAppender &#xff08;2&#xff09;ConsoleAppender &#xff08;3&#xff09;FileAppender &#xff08;4&a…

devops-Maven【部署及配置】

1、准备maven工具包&#xff0c;Maven官网下载Maven的安装包 Maven – Download Apache Maven Index of /maven (apache.org) 选择后缀是.bin.tar.gz的文件下载&#xff0c;此处下载的版本是3.9.6。 2、安装maven的目录下&#xff0c;建一个Maven路径&#xff0c;然后把压缩…

GEE 底图加载——自定义底图样式加载案例分析(含免费引如多款底图)

在本教程中&#xff0c;您将学习如何更改地图对象的选项&#xff0c;以便为底层基础地图定义自己的样式。 地球引擎中的默认地图 地球引擎的基础地图是 Google Map API 中的地图。默认选项包括 roadmap&#xff0c;显示默认的路线图视图、卫星&#xff0c;显示谷歌地球卫星图…

洗衣洗鞋店小程序对接水洗唛打印,一键预约,支付无忧

随着社会的进步和科技的发展&#xff0c;我们的生活幸福感与日俱增。为了让我们从琐碎中解脱出来&#xff0c;干洗店洗鞋店行业也日新月异。今天&#xff0c;我为大家推荐这款优秀的干洗店小程序系统&#xff0c;让您的洗衣洗鞋服务体验更上一层楼。 干洗店管理系统是一款专为洗…

前端对于大图片与小图片的处理 转base64

对于小图片&#xff0c;可以转换为base64字节编码的字符串&#xff0c;减少一次资源请求&#xff0c;资源占用多了一丢丢而已 对于大图片&#xff0c;就算了&#xff0c;得不偿失 比如&#xff0c;webpack处理图片资源

掌握这几个技术点,你也能开发出爆款ARPG游戏!

在众多ARPG游戏的发售下&#xff0c;游戏市场温度迅速升高&#xff0c;今年很可能会成为一个“ARPG手游大年”&#xff0c;或许会再次出现“神仙打架”的情况。 ARPG作为一种非常经典且流行的游戏类型, 已经诞生过无数经典的作品,比如魂系,暗黑破坏神系列,塞尔达传说系列&#…

《计算机程序的构造和解释》

文章目录 写在末尾 &#x1f680; 个人简介&#xff1a;CSDN「博客新星」TOP 10 &#xff0c; C/C 领域新星创作者&#x1f49f; 作 者&#xff1a;锡兰_CC ❣️&#x1f4dd; 专 栏&#xff1a;【锡兰赠书】&#x1f308; 若有帮助&#xff0c;还请关注➕点赞➕收藏&…