275. 传纸条(DP)

题目描述
小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题。一次素质拓展活动中,班上同学安排坐成一个 m 行 n 列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了。幸运的是,他们可以通过传纸条来进行交流。纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,坐标 (1,1),小轩坐在矩阵的右下角,坐标 (m,n)。从小渊传到小轩的纸条只可以向下或者向右传递,从小轩传给小渊的纸条只可以向上或者向左传递。在活动进行中,小渊希望给小轩传递一张纸条,同时希望小轩给他回复。班里每个同学都可以帮他们传递,但只会帮他们一次,也就是说如果此人在小渊递给小轩纸条的时候帮忙,那么在小轩递给小渊的时候就不会再帮忙,反之亦然。 还有一件事情需要注意,全班每个同学愿意帮忙的好感度有高有低(注意:小渊和小轩的好心程度没有定义,输入时用 0 表示),可以用一个 0∼100 的自然数来表示,数越大表示越好心。小渊和小轩希望尽可能找好心程度高的同学来帮忙传纸条,即找到来回两条传递路径,使得这两条路径上同学的好心程度之和最大。现在,请你帮助小渊和小轩找到这样的两条路径。
输入格式
第一行有 2 个用空格隔开的整数 m 和 n,表示学生矩阵有 m 行 n 列。
接下来的 m 行是一个 m×n 的矩阵,矩阵中第 i 行 j 列的整数表示坐在第 i 行 j 列的学生的好心程度,每行的 n 个整数之间用空格隔开。
输出格式
输出一个整数,表示来回两条路上参与传递纸条的学生的好心程度之和的最大值。
在这里插入图片描述
有一个地方要注意:

				int t=w[i1][j1];
                if(i1!=i2) t+=w[i2][j2];//不重复就都加上

虽然题目告诉我们同一个点不能走两次,但是我们任然可以这样处理是因为:
如果一个点你硬要走两次我只给你加一次,就相当于走了一次之后这个点的值就变成了0,如果考虑第二次的时候,只要走任何一个不为0的(题目告诉我们没有负数)点都比走这个0要给的值多得多,所以直接这样写即可,这样重复的值最后肯定是会被淘汰的,所以不用过多纠结这里
状态转移分析:(有一点要注意因为要么下要么右,k的值一定是加1的)
f[k][i1][i2]代表了当前走到点
下面四个状态代表了走到当前状态之前的一个状态

f[k-1][i1-1][i2-1]: k的值加一上面解释了为什么,相当于当前状态i1和i2加一,代表了都往下走了

f[k-1][i1-1][i2]: k的值加一上面解释了为什么,相当于当前状态i1加一和i2不变,所以第一个点下走,第二个点j2必然发生了变化,第二个点右走

f[k-1][i1][i2-1]: k的值加一上面解释了为什么,相当于当前状态i1不变和i2加一,所以第二个点下走,第一个点j1必然变了,第一个点是右走

f[k-1][i1][i2]: k的值加一上面解释了为什么,相当于当前状态i1和i2不变,那么必然是j变了,代表了都往右

				f[k][i1][i2]=max(f[k][i1][i2],f[k-1][i1-1][i2-1]+t);//下下
                f[k][i1][i2]=max(f[k][i1][i2],f[k-1][i1-1][i2]+t);//下右
                f[k][i1][i2]=max(f[k][i1][i2],f[k-1][i1][i2-1]+t);//右下
                f[k][i1][i2]=max(f[k][i1][i2],f[k-1][i1][i2]+t);//右右
#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
int w[115][115];//每个人好心程度
int f[300][115][115];//状态转移
int n,m;
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            cin>>w[i][j];//输入
    for(int k=2;k<=n+m;k++)
        for(int i1=1;i1<=n;i1++)
            for(int i2=1;i2<=n;i2++){
            int j1=k-i1,j2=k-i2;//求出j值
            if(j1>=1&&j2>=1&&j1<=m&&j2<=m)
            //j值符合条件才能继续
            {
                int t=w[i1][j1];
                if(i1!=i2) t+=w[i2][j2];//不重复就都加上
                //k代表俩点i+j的总和
                //max里面,后者表示原始状态
                f[k][i1][i2]=max(f[k][i1][i2],f[k-1][i1-1][i2-1]+t);
                //下and下
                f[k][i1][i2]=max(f[k][i1][i2],f[k-1][i1-1][i2]+t);
                //下and右
                f[k][i1][i2]=max(f[k][i1][i2],f[k-1][i1][i2-1]+t);
                //右and下
                f[k][i1][i2]=max(f[k][i1][i2],f[k-1][i1][i2]+t);
                //右and右
            }
        }  
    cout<<f[n+m][n][n];
    return 0;
}

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

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

相关文章

CMU15/445 2023 Spring-project1 LRU-K 替换策略

在写个demo之前&#xff0c;专门学习了LRU:【LeetCode刷题】146. LRU 缓存-CSDN博客 使用哈希表 双向链表可以满足删除/增加的时间复杂度为O(1)。 在通读完15/445这块的说明之后&#xff0c;发现和LRU还是有些差别的。 官方文档中对LRU-K的解释是&#xff1a;LRU-K算法根据所…

Spring boot框架Rouyi Cloud入门之token

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 往期热门专栏回顾 专栏…

【Gluten】Spark 的向量化执行引擎框架 Gluten

Gluten 项目主要用于“粘合” Apache Spark 和作为 Backend 的 Native Vectorized Engine。Backend 的选项有很多&#xff0c;目前在 Gluten 项目中已经明确开始支持的有 Velox、Clickhouse 和 Apache Arrow。通过使用Native backend 执行计算&#xff0c;加速 Spark 执行速度&…

超市商品管理系统的设计与实现(全套资料)

一、系统架构 前端&#xff1a;vue | view-design 后端&#xff1a;springboot | mybatis-plus 环境&#xff1a;jdk17 | mysql8 | maven | nodejs | redis 二、代码及数据库 三、功能介绍 01. web端-首页 02. web端-超市概况 03. web端-超市区域 04. …

【Web】纯萌新的BUUCTF刷题日记Day1

目录 [RoarCTF 2019]Easy Java [网鼎杯 2018]Fakebook [CISCN2019 华北赛区 Day2 Web1]Hack World [BJDCTF2020]The mystery of ip [网鼎杯 2020 朱雀组]phpweb [BSidesCF 2020]Had a bad day [BJDCTF2020]ZJCTF&#xff0c;不过如此 [BUUCTF 2018]Online Tool [GXYCTF…

并发 ---- 多线程原理及底层实现

并发现象遍布日常生活&#xff0c;我们时常接触&#xff1a;我们可以边走路边说话&#xff1b;或者&#xff0c;左右手同时做出不一样的动作。在计算机应用程序中也有很好的例子&#xff1a; 浏览器 - 浏览器可以同时下载任意数量的文件和打开多个网页&#xff0c;下载时仍允许…

观测线程的工具——jconsole

joconsole的简单使用 joncole位置在jdk/bin路径中&#xff0c;在进入路径后可以查找到jconsole.exe的应用程序。如图&#xff1a; 双击创建jconsole进程&#xff0c;可以在里面选择所要观测的java文件。 以我的代码为例&#xff1a; class MyThread extends Thread {Overrid…

用户侧终端表计--预付费电表/费控/时间控制/负载控制/远程充值/远程抄表/分时计量/定量电能表/多回路预付费电表

预付费电表&#xff08;先付费后用电&#xff09;又叫做定量电能表&#xff0c;除了具有普通电能表的计量功能外&#xff0c;特别的是用户先买电&#xff0c;买电后才能用电&#xff0c;若用完电后用户不继续买电&#xff0c;则自动切断电源停止供电。 安科瑞薛瑶瑶1870170908…

Spark编程基础

一、RDD入门 1.RDD是什么&#xff1f; RDD是一个容错的、只读的、可进行并行操作的数据结构&#xff0c;是一个分布在集群各个节点中的存放元素的集合&#xff0c;即弹性分布式数据集。 2.RDD的三种创建方式 第一种是将程序中已存在的集合&#xff08;如集合、列表、数组&a…

【JavaSE零基础】00-基础语法(1-12章)

1 第一章 Java开发环境搭建 1.1 章节目标与知识框架 1.1.1 章节目标 掌握Java的开发环境搭建&#xff0c;会编写HelloWorld程序&#xff0c;并能够准确的进行编译和运行&#xff1b;理解path和classpath环境变量并可以自行配置。 1.1.2 知识框架 1.2 Java语言概述(了解) J…

Uniapp/HTML5 上传文件到腾讯云Cos图片存储(Demo)

Uniapp引入方式 npm install cos-js-sdk-v5 HTML引入方式 <script type"text/javascript" src"js/cos-js-sdk-v5.min.js"></script> 在腾讯官网中找到cosJs放到本地项目中引入在项目中util工具类目录下封装一个upload.js用于公共上传Js impo…

操作系统②——内存管理

1. 栈、堆 1.1 程序的内存分配 栈区&#xff08;stack&#xff09;&#xff1a;由编译器自动分配释放 &#xff0c;存放函数的参数值&#xff0c;局部变量的值等。其操作方式类似于数据结构中的栈。堆区&#xff08;heap&#xff09;&#xff1a;一般由程序员分配释放&#x…

C++:stack类和queue类

stack的介绍和使用 1. stack 是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;其删除只能从容器的一端进行元素的插入与提取操作。 2. stack 是作为容器适配器被实现的&#xff0c;容器适配器即是对特定类封装作为其底层的容器&#xff0c;并…

H265码率控制(一)之HM代码R-λ model介绍

前言 在HM中R-λ的码率控制引入是在k0103提案中开始引入的&#xff0c;代码是HM-8.0以后的版本出现的&#xff0c;后面经过多个提案不断的修改&#xff0c;如M0257提案&#xff0c;M0036提案等&#xff1b;笔者建议研究HM代码的R-λ码率控制从HM10.0版本开始这个版本的R-λ已经…

1.基础乐理-唱名与记住唱名的方法

首先有 0、1、2、3、4、5、6、7&#xff0c;这八个数字 在音乐中要用笔来记录音乐就要用到 0、1、2、3、4、5、6、7&#xff0c;这八个数字&#xff0c;如果我们要唱出来 或 说出来&#xff0c;只要用嘴巴说出来就不是用 0、1、2、3、4、5、6、7&#xff0c;这八个数字了&…

雄安新区:创新引领,未来产业的摇篮

雄安新区&#xff1a;创新引领&#xff0c;未来产业的摇篮 随着雄安新区的建设不断推进&#xff0c;这座未来之城正逐渐成为创新的高地和创业的热土。在这片充满希望的土地上&#xff0c;全过程创新生态链正在形成&#xff0c;为未来产业的发展提供了坚实的基础。 创新高地&a…

机器学习(五) -- 监督学习(3) -- 朴素贝叶斯

系列文章目录及链接 目录 前言 一、朴素贝叶斯通俗理解及定义 二、原理理解及公式 1、概率基础 2、贝叶斯公式 3、拉普拉斯平滑系数 三、**算法实现 四、接口实现 1、新闻数据集介绍 2、API 3、流程 3.1、获取数据 3.2、数据预处理 3.3、特征工程 3.4、朴素贝叶…

java代码混淆,保护源码的重要性

Java代码混淆是一种重要的安全措施&#xff0c;用于保护Java应用程序的源代码免受恶意攻击和逆向工程的影响。下面是关于Java代码混淆以及保护源码重要性的详细说明&#xff1a; 1. 什么是Java代码混淆&#xff1f; Java代码混淆是指通过对Java代码进行一系列的转换和优化&am…

SD卡误删怎么恢复?5个恢复方法助你找回数据!

“我刚刚在清理sd卡时突然发现sd卡里的部分文件误删了&#xff0c;大家有什么方法可以恢复sd卡重要文件吗&#xff1f;” SD卡&#xff0c;作为一种常见的存储设备&#xff0c;经常用于手机、相机等电子设备中&#xff0c;存储着大量的数据。然而&#xff0c;误删操作往往会导致…

容器和K8s常见概念

【容器】 1、Open Container Initiative&#xff08;OCI&#xff09;&#xff1a;制定和推动容器格式和运行时的开放标准。容器运行时需要遵循此标准。主要的产出物包括&#xff1a; OCI Image Specification: 定义容器镜像格式的规范&#xff0c;统一描述容器镜像的内容和结…