P7074 [CSP-J 2020] 方格取数

news/2025/10/28 10:20:20/文章来源:https://www.cnblogs.com/qwqSW/p/19170823

题目传送门

博客传送门

当时打眼一看没看见还能向上走,还在想为什么是个绿题……

进入正题。如果没有向上走的话,就是个经典简单的 dp。所以对于这个问题,我们还是先考虑 dp。

如果说我们按行从上往下转移肯定是有后效性的,不可行。但是我们发现,如果我们向右走,那我们是回不到左边的,这样就没有后效性了。所以我们从左往右转移,也就是从 \(j-1\) 列往第 \(j\) 列转移。

而对于这两列中的任意两个位置 \((k,j-1)\)\((i,j)\),假设我们在 \((k,j-1)\) 这个位置向右走,那么由于不能走重复的格子,肯定是先向右,然后一直向上或向下的,不可能出现折返的情况。

P7074_1_1

P7074_2_1

我们设 \(dp_{i,j}\) 表示考虑到第 \(j\) 列,第 \(i\) 行的最大得分。这样我们就可以枚举上一列里向右走的那个位置了。朴素的转移方程如下:

\[dp_{i,j}=\max\limits_{k=1}^{n}{dp_{k,j-1}+\sum\limits_{l=min(k,j)}^{max(k,j)}{a[i][l]}} \]

这样是 \(O(n^4)\) 的,过不去啊。但是我们可以先求每行竖直方向的前缀和,优化掉累加的一个 \(n\),这样就是 \(O(n^3)\),还是过不去。

我们先把优化后的转移式子写一下:

\[dp_{i,j}=\max\limits_{k=1}^{n}{ \begin{cases} dp_{k,j-1}+sum_{i,j}-sum_{k-1,j} (k \le i)\\ dp_{k,j-1}+sum_{k,j}-sum_{i-1,j} (k > i)\\ \end{cases} } \]

因为我们的枚举顺序肯定是 \(j\) 在外层循环(首先保证是由 \(j-1\) 列转移来),所以枚举 \(i,k\)\(j\) 是固定的,所以我们可以把有关 \(i\)\(k\) 的项分开,也就是:

\[dp_{i,j}=\max\limits_{k=1}^{n}{ \begin{cases} (dp_{k,j-1}-sum_{k-1,j})+(sum_{i,j}) (k \le i)\\ (dp_{k,j-1}+sum_{k,j})-(sum_{i-1,j}) (k > i)\\ \end{cases} } \]

对于 \(k \le i\) 的情况,我们可以正序枚举 \(i\),并时刻记录一个最大值 \(mx\),其中 \(mx=\max\limits_{k=1}^{i}{dp_{k,j-1}-sum_{k-1,j}}\)

这样我们对于一个新加入的可以拿去更新的 \(i\) 直接 \(O(1)\) 更新,然后用 \(mx\) 转移 \(dp_{i,j}\) 即可。\(k > i\) 的情况同理。(不过要倒序枚举)

由于是取最大值,所以我们正着来一遍倒着来一遍,这样对于每个 \((i,j)\),它都被向下来的最优解和向上来的最优解更新过一遍,所以本做法是对的。

代码:

P7074
#include<bits/stdc++.h>
#define int long long
using namespace std;inline int read(){int x=0,f=1;char c=getchar();while(c<48){if(c=='-') f=-1;c=getchar();}while(c>47) x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f;
}inline void write(int x){if(x<0) putchar('-'),x=-x;if(x<10) putchar(x+'0');else write(x/10),putchar(x%10+'0');
}const int N=1314;
const int inf=1e16;
int n,m,a[N][N],dp[N][N],sum[N][N];
//sum[i][j]:对第j列做前缀和,当前做到第i行 signed main(){n=read(),m=read();for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){a[i][j]=read();sum[i][j]=sum[i-1][j]+a[i][j];}}//由于结果可能为负,所以初始化一定是赋极小值 for(int j=1;j<=n;j++){for(int i=1;i<=m;i++){dp[j][i]=-inf;}}//对于第一列的数来说,显然只能从左上角往下走 for(int j=1;j<=n;j++){dp[j][1]=sum[j][1];}for(int i=2;i<=m;i++){int mx=-inf;//mx:同题解 //计算k<=i时的最优解 for(int j=1;j<=n;j++){//i是当前新加入的可更新mx的位置,更新mx mx=max(mx,dp[j][i-1]-sum[j-1][i]);dp[j][i]=max(dp[j][i],mx+sum[j][i]);}//计算k>i时的最优解 //同上 mx=-inf;for(int j=n;j>=1;j--){mx=max(mx,dp[j][i-1]+sum[j][i]);dp[j][i]=max(dp[j][i],mx-sum[j-1][i]);}}int ans=dp[n][m];printf("%lld",ans);return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025 年中央空调维保服务公司最新推荐榜,技术实力与市场口碑深度解析上海中央空调维保 / 昆山中央空调维修 / 昆山中央空调保养公司推荐

引言 商用中央空调维保服务质量关乎企业运营成本与设备寿命,为精准筛选优质服务商,本次推荐榜联合制冷空调工业协会、建筑节能协会开展测评。测评历时 3 个月,覆盖苏州、上海等长三角核心商业区域,采用 “三维九项…

2025年隔热条厂家权威推荐榜单:尼龙隔热条,PA66尼龙隔热条,建筑用隔热条,断桥铝门窗隔热条,门窗隔热条,幕墙隔热条,阳光房隔热条,国标隔热条厂家精选

2025年隔热条厂家权威推荐榜单:尼龙隔热条,PA66尼龙隔热条,建筑用隔热条,断桥铝门窗隔热条,门窗隔热条,幕墙隔热条,阳光房隔热条,国标隔热条厂家精选 一、行业背景与发展现状 随着建筑节能要求的不断提高和绿色…

国产ftp传输文件,提升企业数据安全性的解决方案

国产FTP传输文件技术在提升企业数据安全方面扮演了关键角色。随着数据安全问题日益严重,企业亟需有效的解决方案以确保信息的安全性。国产FTP通过应用先进的加密技术,明显降低了账号和文件内容被窃取的风险。此外,它…

2025年度线材立式注塑机直销厂家TOP3综合榜单:线材立式注塑机/精密立式注塑机/立式转盘注塑机源头厂家精选。

在电子、汽车、医疗等精密制造领域,线材立式注塑机的成型精度与稳定性直接关系到终端产品的合格率与生产成本。 本文将根据技术实力、产品性能、市场应用及行业口碑等多维度数据,为您推荐三家在线材立式注塑机领域表…

new URLSearchParams 功能用法详解

什么是URLSearchParams? URLSearchParams是一个Web API,提供了一系列方法来处理URL的查询字符串。它让我们能够以更直观、更安全的方式构建和解析URL参数。 传统方式 vs URLSearchParams传统方式(字符串拼接):// …

2025 年防腐木厂家最新推荐榜,技术实力与市场口碑深度解析防腐木凉亭 / 防腐木围栏 / 防腐木木屋 / 防腐木地板公司推荐

引言 伴随户外景观、市政工程与住宅配套项目的持续增长,防腐木市场规模年增速达 8.3%,但产品质量差异引发的纠纷占比超 35%。为破解选购难题,本榜单依托木材保护工业协会 2025 年度测评数据,采用 “三维九维评估体…

一个程序如何连接数据库?以C++为例 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

基于MATLAB的多目标粒子群算法(MOPSO)实现帕累托最优解群

一、算法原理与核心步骤 多目标粒子群优化(MOPSO)通过群体协作搜索多目标问题的帕累托最优解集,其核心步骤包括:粒子初始化:随机生成粒子群的位置和速度 适应度评估:计算每个粒子的多目标函数值 支配关系判断:筛…

跨网数据交换平台有哪些优势与应用解析

跨网数据交换平台是现代企业实现高效信息流通的重要工具。它不仅提升了数据传输的安全性,还为企业提供了高效的操作方式,确保信息在各个网络之间顺畅流动。这些平台通过加密技术和多重身份验证,更好地保护敏感数据,…

2025 年搬运公司最新推荐榜,技术实力与市场口碑深度解析覆盖工厂搬迁 / 设备搬运 / 吊装搬运全场景公司推荐

引言 在工业化与物流行业深度融合的背景下,吊装搬运服务已成为保障工业项目落地、企业运营迁移的核心环节。为破解市场服务碎片化、技术能力参差不齐等痛点,本次榜单依托中国起重吊装协会 2025 年度行业测评体系编制…

2025年度液压式变位机供应商TOP3综合榜单:头尾升降变位机/L型变位机/焊接操作机源头厂家精选

在焊接自动化领域,液压式变位机能将工件旋转至最佳焊接位置,使焊缝成型质量提升30%以上,同时降低工人劳动强度。 本文将根据液压式变位机供应商的技术实力、产品性能、市场应用及行业口碑等多维度数据,为您推荐三家…

2025年口碑好的合同档案管理系统数字化

2025年口碑好的合同档案管理系统数字化推荐引言在数字化浪潮席卷各行各业的今天,合同档案管理系统的数字化转型已成为企业提升运营效率、降低法律风险的关键举措。2025年,随着人工智能、区块链等技术的深度融合,合同…

Spring Boot中Spring Data JPA的常用注解

在Spring Boot中,Spring Data JPA通过一系列注解简化了数据库操作,这些注解主要用于实体类与数据库表的映射、字段约束、关系定义等。 一、实体类与表映射注解@Entity作用:标记类为JPA实体类,对应数据库中的一张表…

从零开始制作 MyOS(三)

从零开始制作 MyOS(三)—— 切换保护模式 目标 今天的目标是从实模式切换到保护模式 保护模式切换流程设置GDT (lgdt) 启用A20地址线 设置CR0.PE标志 远跳转刷新流水线 初始化保护模式段寄存器关键组件解析GDT 设置g…

2025年口碑好的富氢水机招商加盟项目合作

2025年口碑好的富氢水机招商加盟项目合作指南 随着健康饮水理念的普及,富氢水机因其抗氧化、促进新陈代谢等功效,成为净水行业的新宠。2025年,富氢水机市场迎来爆发式增长,众多企业纷纷布局招商加盟业务。本文精选…

2025年评价高的澳洲海外仓一件代发跨境电商优选平台榜

2025年评价高的澳洲海外仓一件代发跨境电商优选平台榜 引言 随着跨境电商的蓬勃发展,澳洲市场因其稳定的消费能力和成熟的电商环境,成为众多中国卖家的首选目标。然而,物流和仓储问题一直是跨境卖家的痛点,尤其是…

向JKS(Java KeyStore)文件中添加证书

向JKS(Java KeyStore)文件中添加证书向JKS(Java KeyStore)文件中添加证书是一个常见的操作,主要用于配置SSL/TLS。下面我将为你详细介绍操作方法、注意事项以及相关概念。 🗂️ 理解JKS的类型 首先,理解JKS的两…

2025年评价高的企业目视化规划最新品牌实力榜品牌

2025年评价高的企业目视化规划最新品牌实力榜在当今竞争激烈的商业环境中,企业目视化管理已成为提升运营效率、增强安全性和塑造品牌形象的关键战略。目视化规划通过直观的视觉元素将复杂的管理流程简化,使信息传递更…

2025年口碑好的河南公司注册代理记账企业推荐榜

2025年口碑好的河南公司注册代理记账企业推荐榜 在当今竞争激烈的商业环境中,选择一家专业、可靠的代理记账公司对企业的发展至关重要。河南作为中部地区的重要经济省份,拥有众多优秀的财税服务企业,它们凭借专业的…