当前位置: 首页 > news >正文

洛谷 P11293 [NOISG 2022 Qualification] L-Board

[Analysis] \texttt{\color{blue}{[Analysis]}} [Analysis]

很显然,对于单个点来说,它的第一项对答案的贡献就是往左最大连续子段和和往右最大连续子段和的较大值,第二项对答案的贡献就是往上的最大连续子段和和往下的最大连续子段和的较大值,第三项是本身。

于是把问题转化为求最大连续子段和。

当然这个问题可以用一个经典的 dp 解决。但是对于一个退役的大学生来说,问题应该怎么复杂化怎么来。

连续和的问题一般都可以转化为前缀和。以往左的最大连续子段和为例,设 l i , j l_{i,j} li,j 表示 ( i , j ) (i,j) (i,j) 往左的前缀和,即:

l i , j = ∑ k = 1 j a i , j l_{i,j} = \sum\limits_{k=1}^{j} a_{i,j} li,j=k=1jai,j

那么从 ( i , j ) (i,j) (i,j) 往左的最大连续子段和就是 l i , j l_{i,j} li,j 减去最小的 l i , k ( 0 ≤ k < j ) l_{i,k}(0 \leq k <j) li,k(0k<j),其中 l i , 0 l_{i,0} li,0 定义为 0 0 0

注意代码实现的细节,挺多细节需要考虑的。

[Code] \color{blue}{\text{[Code]}} [Code]

int main(){
	n=read();m=read();
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			a[i][j]=read();
	
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++)
			Left[i][j]=Left[i][j-1]+a[i][j];
		for(int j=m;j>=1;j--)
			Right[i][j]=Right[i][j+1]+a[i][j];
		
		minn[0]=0;
		for(int j=1;j<=m;j++)
			minn[j]=min(minn[j-1],Left[i][j-1]);
		for(int j=1;j<=m;j++)
			Left[i][j]-=minn[j];
		
		minn[m+1]=0;
		for(int j=m;j>=1;j--)
			minn[j]=min(minn[j+1],Right[i][j+1]);
		for(int j=m;j>=1;j--)
			Right[i][j]-=minn[j];
	}
	for(int j=1;j<=m;j++){
		for(int i=1;i<=n;i++)
			Up[i][j]=Up[i-1][j]+a[i][j];
		for(int i=n;i>=1;i--)
			Down[i][j]=Down[i+1][j]+a[i][j];
		
		minn[0]=0;
		for(int i=1;i<=n;i++)
			minn[i]=min(minn[i-1],Up[i-1][j]);
		for(int i=1;i<=n;i++)
			Up[i][j]-=minn[i];
		
		minn[n+1]=0;
		for(int i=n;i>=1;i--)
			minn[i]=min(minn[i+1],Down[i+1][j]);
		for(int i=n;i>=1;i--)
			Down[i][j]-=minn[i];
	}
	
	ans=-1e18;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			ckmax(ans,max(Up[i][j],Down[i][j])+max(Left[i][j],Right[i][j])-a[i][j]);
	
	printf("%lld",ans);
	
	return 0;
}

相关文章:

  • Flutter 3.29.0 版本对颜色Color做出的改动 Display P3你了解吗
  • 【面试】Java 中的 BIO、NIO 和 AIO:区别、使用及实例
  • 功能丰富的自动化任务软件zTasker_2.1.0_绿色版_屏蔽强制更新闪退
  • 基于GIS(地理信息系统)技术的智能交通系统的设计与实现
  • Python 网络爬虫的应用
  • C# 13与.NET 9革新及工业开发应用
  • 数据库原理与使用基础教程
  • 使用Docker将ros1自定义消息通过rosjava_bootstrap生成jar包
  • SQL经典题型
  • 4-1.jvm的类加载
  • 基于大数据的气象数据分析与可视化系统设计与实现【爬虫海量数据,LSTM预测】
  • Vue核心知识:KeepLive全方位分析
  • shell场景题
  • 通往 AI 之路:Python 机器学习入门-语法基础
  • 基于51单片机超声波测量报警LCD1602显示( proteus仿真+程序+设计报告+讲解视频)
  • 塔子哥Python算法基础课
  • Conda 环境搭建实战:从基础到进阶
  • flutter AnimationController 动画使用总结
  • [创业之路-329]:华为铁三角实施的步骤
  • uiautomatorviewer定位元素报Unexpected ... UI hierarchy
  • 墨西哥海军帆船纽约撞桥事故已致2人死亡19人受伤
  • 解锁儿时愿望!潘展乐战胜孙杨,全国冠军赛男子400自夺冠
  • 上百家单位展示AI+教育的实践与成果,上海教育博览会开幕
  • 上海比常年平均时间提前12天入夏,明天最高气温可达33℃
  • 上海国际碳中和博览会下月举办,首次打造民营经济专区
  • 再现五千多年前“古国时代”:凌家滩遗址博物馆今开馆