蓝桥杯--省赛题4

2023-11-14

今天来看道蓝桥杯的动态规划题:
题目描述
小蓝在一个 nn 行 mm 列的方格图中玩一个游戏。

开始时,小蓝站在方格图的左上角,即第 11 行第 11 列。

小蓝可以在方格图上走动,走动时,如果当前在第 rr 行第 cc 列,他不能走到行号比 rr 小的行,也不能走到列号比 cc 小的列。同时,他一步走的直线距离不超过 33。

例如,如果当前小蓝在第 33 行第 55 列,他下一步可以走到第 33 行第 66 列、第 33 行第 77 列、第 33 行第 88 列、第 44 行第 55 列、第 44 行第 66 列、第 44 行第 77 列、第 55 行第 55 列、第 55 行第 66 列、第 66 行第 55 列之一。

小蓝最终要走到第 nn 行第 mm 列。

在图中,有的位置有奖励,走上去即可获得,有的位置有惩罚,走上去就要接受惩罚。奖励和惩罚最终抽象成一个权值,奖励为正,惩罚为负。

小蓝希望,从第 11 行第 11 列走到第 nn 行第 mm 列后,总的权值和最大。请问最大是多少?

输入描述
输入的第一行包含两个整数 n, mn,m,表示图的大小。

接下来 nn 行,每行 mm 个整数,表示方格图中每个点的权值。

其中,1 \leq n \leq 100,-10^4 \leq 权值 \leq 10^41≤n≤100,−10
4
≤权值≤10
4

输出描述
输出一个整数,表示最大权值和。

输入输出样例
示例 1
输入

3 5
-4 -5 -10 -3 1
7 5 -9 3 -10
10 -2 6 -10 -4
copy
输出

15

**题解:**该题需要求最大值,初步分析应该用到动态规划,那么我们可以试着去分析下子问题的状态方程,不同于以往题的是他可以走的距离不超过三步就可以,也就是说他到达状态maxD[i,j]不只是两种走法了,变成了九种,所以应该有九个状态。maxD[i-1,j],maxD[i-2,j],maxD[i-3,j],maxD[i,j-1],maxD[i,j-2],maxD[i,j-3],maxD[i-1,j-1],maxD[i-2,j-1],maxD[i-1,j-2],那么我们要做的就是选出权值最大的一个状态,而且还需要思考在什么条件下,它存在以下九个状态,如果横坐标小于3,那显然没有九种走法。我们可以设置二维状态数组maxD[n+1][m+1],
那么就存在如下九个状态:
(1) if (j-1>= 1) max = Math.max(maxD[i][j-1],max);

(2) if(j-2>=1) max=Math.max(maxD[i][j-2],max);

(3) if(j-3>=1) max=Math.max(maxD[i][j-3],max);

(4) if(i-1>=1) max=Math.max(maxD[i-1][j],max);

(5) if(i-1>=1 && j-1>=1) max=Math.max(maxD[i-1][j-1],max);

(6) if(i-1>=1 && j-2>=1) max=Math.max(maxD[i-1][j-2],max);

(7) if(i-2>=1) max=Math.max(maxD[i-2][j],max);

(8) if(i-2>=1 && j-1>=1) max=Math.max(maxD[i-2][j-1],max);

(9) if(i-3>=1) max=Math.max(maxD[i-3][j],max);

代码如下:

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();

        int[][] weight = new int[n+1][m+1];
        for (int i=1;i<=n;i++){
            for (int j=1;j<=m;j++){
                weight[i][j] = sc.nextInt();
            }
        }

        System.out.println(maxWeight(weight));

    }


    private static int maxWeight(int[][] weight) {

        int row = weight.length;
        int col = weight[0].length;
        int[][] maxD = new int[row+1][col+1];

        int max = -1000000;

        for (int i=1;i<=row;i++){
            for (int j=1;j<=col;j++){

                if (i ==1&&j==1) {
                    maxD[i][j] = weight[i][j];
                    continue;
                }

                if (j-1>= 1) max = Math.max(maxD[i][j-1],max);

                if(j-2>=1) max=Math.max(maxD[i][j-2],max);

                if(j-3>=1) max=Math.max(maxD[i][j-3],max);

                if(i-1>=1) max=Math.max(maxD[i-1][j],max);

                if(i-1>=1 && j-1>=1) max=Math.max(maxD[i-1][j-1],max);

                if(i-1>=1 && j-2>=1) max=Math.max(maxD[i-1][j-2],max);

                if(i-2>=1) max=Math.max(maxD[i-2][j],max);

                if(i-2>=1 && j-1>=1) max=Math.max(maxD[i-2][j-1],max);

                if(i-3>=1) max=Math.max(maxD[i-3][j],max);

                maxD[i][j] = max+weight[i][j];

            }
        }

        return maxD[row][col];

    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

蓝桥杯--省赛题4 的相关文章

  • nacos2.2.1集成达梦数据库

    nacos2 2 1集成达梦数据库 1 下载源码 https github com alibaba nacos 2 新增达梦驱动依赖 父pom xml
  • openwrt篇修改WiFi热点默认名称和主机名

    在如下图文件中 修改ssid 在如下图文件中修改hostname
  • Linux的用户空间与内核空间

    一 简介 Linux 操作系统和驱动程序运行在内核空间 应用程序运行在用户空间 两者不能简单地使用指针传递数据 因为Linux使用的虚拟内存机制 用户空间的数据可能被换出 当内核空间使用用户空间指针时 对应的数据可能不在内存中 用户空间的内

随机推荐

  • vue3项目引入高德地图详细方法教程

    项目需求需要引入地图 对于目前最新的Vue3 0 无论是百度 高德 腾讯地图目前还没有适配 只有Vue 2 x版本的 目前只有谷歌地图的Vue3 0适配 但是没有适配并不代表不能使用 下面就来教大家如何使用 1 在高德开发平台申请你的key
  • react定义函数,默认函数参数的方式

    参数是 对象 有传入参数用传入参数作为入参数 无传入参数用默认值 getTableData async pageData gt const params Object assign currPage 1 pageSize this stat
  • 网传字节跳动实习生删除GB以下所有机器学习模型,差点没上头条

    作者 陈大鑫 陈彩娴 来源 AI科技评论 昨晚脉脉上有网友爆料 字节跳动一位实习生删除了公司所有轻量级别的机器学习模型 什么是lite模型 该楼主表示 lite模型就是公司内几乎所有GB大小以下的机器学习模型 且全部被删除了 实习生直接删除
  • 公司固定资产怎么明细管理

    固定资产的管理是一个至关重要的环节 它不仅影响到企业的运营效率和经济效益 也直接影响到公司的长期发展 因此 对固定资产进行精细化管理 是每一个负责任的企业都应该做到的 本文将探讨如何通过创新的方式 实现公司固定资产的明细管理 我们需要明确什
  • 设置vscode终端的最大输出行

    使用vscode终端输出的时候 如果输出的行数很多 之前打印的东西就看不到了 因此需要设置一下终端输出的最大行数来保留之前的信息 terminal integrated bell scrollback
  • MMDet——EMA更新hook详解

    Hook 首先需要明白mmdet中hook机制 EMA就是建立在Hook机制上的 推荐一个Hook详解 深度理解目标检测 MMdetection HOOK机制 EMA 指数平均 exponential mean average 一般来说 在
  • 使用Google Guava Cache Util工具类实现本地缓存设置过期时间的Java应用

    使用Google Guava Cache Util工具类实现本地缓存设置过期时间的Java应用 随着互联网应用的发展 缓存成为提高系统性能和响应速度的关键技术之一 而在Java开发中 Google Guava提供了一个强大的缓存工具类 Ca
  • 关于数据库表字段的数据权限设计

    吐槽 刚在同事的帮忙下 把maven工程成功导入到eclipse 期间遇到的最大问题就是安装eclipse插件 花费了其中大部分的时间 现在做的研发产品 遇到的一个新的需求是 控制外部系统对于表中字段的访问权限 其实说白了 就是 对于CRU
  • sklearn机器学习包中的对原始数据的预处理及训练集、测试集的分割

    sklearn机器学习包中的对原始数据的预处理及训练集 测试集的分割 一 数据预处理 1 标准化 2 归一化 3 最小最大标准化 4 缺失值插补 二 训练集测试集的划分 一 数据预处理 sklearn preprocessing 包提供了几
  • 编码-整数

    计算机中存储的数值 正数为其原码 而负数存的是其补码 正数 原码 用最高位表示符号位 其余位表示数值 其中 正数的符号位为 0 负数的符号位为 1 正整数转成二进制 除二取余 直到商为零或一时为止 然后倒序排列 举个栗子 121 gt 0
  • 【蓝桥杯】什么算法才是版本答案?近三年(2019-2021)蓝桥杯省赛涉及算法出现频率分析

    2022年的蓝桥杯比赛已经基本报名结束 寒假来临 如何抓住重点 快速掌握各种算法知识 在4月份的蓝桥杯省赛中取得好成绩呢 本文收集了近三年的4场蓝桥杯省赛题目 2019年 2020年第二场 2020年第三场 2021年 并总结了题目涉及的算
  • python是一门机器语言_python是一门怎样的编程语言?

    大家应该都听说过python语言 也知道它是一门非常适合零基础学习的语言 但是对于没有接触过的人来说可能就疑惑python到底是一门什么样的编程语言 1 跨平台 跨平台不依赖操作系统和硬件环境 某个操作系统环境下开发的应用 放在其他的系统中
  • angular中的组件嵌套

    1 创建3个包 header module main module sliderbar module 2 在header module创建三个组件 header center heder left header right 3 z将三个组件
  • BP神经网络回归预测-MATLAB代码实现(代码完整直接可用,注释详细,可供新手学习)

    一 前言 代码获取 私信或附评论区 BP神经网络预测回归MATLAB代码 代码完整可用 复制后即可运行使用 操作简单 1 BP神经网络的知识想必不用再过多介绍 本篇文章从实际应用的角度 针对新手应用者 针对不需要过多了解BP 但是需使用MA
  • Java-主流框架—(4)SpringMVC

    1 SpringMVC概述 三层架构 表现层 负责数据展示 业务层 负责业务处理 数据层 负责数据操作 MVC Model View Controller 一种用于设计创建Web应用程序表现层的模式 Model 模型 数据模型 用于封装数据
  • javaScript基础面试题 --- JS作用域

    面试10家公司 得有8家会问到作用域的题 所以说JS的作用域一定要弄清楚 非常重要 1 除了函数之外 JS没有块级作用域 2 作用域链 内部可以访问外部的变量 但是外部不能访问内部变量 如果内部有 优先内部的 如果内部没有 就先查找外部的
  • 基于深度学习的恶意软件检测

    深度神经网络可以有效地挖掘原始数据中的潜在特征 而无需大量数据预处理和先验经验 神经网络在计算机视觉 语音识别和自然语言处理方面取得了一系列的成功 当然 成功的原因是多方面的 其中的一个因素就是神经网络具有从诸如像素或单个文本字符之类的原始
  • 【软件测试】自动化测试战零基础教程——Python自动化从入门到实战(九)

    整理不易 希望对各位学习软件测试能带来帮助 软件测试知识持续更新 第八章 自动化测试高级应用 第一节 自动发邮件功能 8 1 1 文件形式的邮件 8 1 2 HTML 形式的邮件 8 1 3 获取测试报告 8 1 4 整合自动发邮件功能 第
  • 数据结构中二叉树实现及部分操作

    谈二叉树之前 我们先来看看树的定义 树 由N N gt 0 个结点构成的集合 对N gt 1的树 1 有一个特殊的结点 称为根结点 根节点没有前驱结点 2 除根节点外 其余结点被分成M M gt 0 个互不相交的集合T1 T2 Tm 其中每
  • 蓝桥杯--省赛题4

    今天来看道蓝桥杯的动态规划题 题目描述 小蓝在一个 nn 行 mm 列的方格图中玩一个游戏 开始时 小蓝站在方格图的左上角 即第 11 行第 11 列 小蓝可以在方格图上走动 走动时 如果当前在第 rr 行第 cc 列 他不能走到行号比 r