3.3——若是
题目描述
“一生至少该有一次,为了某个人而忘了自己,不求有结果,不求同行,不求曾经拥有,甚至不求你爱我,只求在我最美的年华里,遇到你。”——徐志摩
原来小W和小K要到到Q镇去游玩。
Q镇是一个非常浪漫的约会圣地,同时它也是一个很特别的城镇。
小镇中有很多道路,四通八达。它有n+1条的小路为南北方向,有m+1条的小路为东西方向,这些道路将Q镇划分成了m×n个区域,而这些区域,从北到南、从西到东的坐标标识为从坐标(1,1)到坐标(m,n)。
小W和小K在网上找到了情侣们对这m×n个区域的打分V(i,j)(分数可正可负)。分数越高表示那个区域越适合情侣们出没,越低表示不适合情侣游玩。为了方便游玩,小W和小K决定选定一个连续的区域集合作为他们的游玩范围。例如,如果他们选择了最西北的区域(m1
,n1)和最东南(m2,n2)区域(m1≤m2,n1≤n2),那么他们的活动范围是(i,j)∣(m1≤i≤m2,n1≤j≤n2)},他们游玩的欢乐值则为这些活动范围的区域评分总和。
小W和小K希望他们游玩范围内的区域的欢乐值最大。
而身为单身狗的你的任务是编写一个程序,求出他们的活动范围(m1,n1),(m2,n2)的欢乐值的最大值。
输入
输入第一行为整数m,n,用空格隔开
接下来有m行,每行有n列整数,其中第i行第j列的整数,代表V(i,j),一个整数之间用空格隔开。输入数据保证这些整数中,至少存在一个正整数。
输出
输出只有一行,为最高的欢乐值。
样例输入
复制样例数据
4 5 1 -2 3 -4 5 6 7 8 9 10 -11 12 13 14 -15 16 17 18 19 20
样例输出
146
提示
对于100%的数据,1≤N,M≤200,且V(i,j)∈[−200000,200000]。
来源/分类
ps:枚举m1,m2,n1,n2会超时,后来看了题解。只需要枚举n1,n2.
看个图
#include <iostream>
#include <cstdio>
using namespace std;
const int N = 205;
int e[N][N];
int d[N][N];
int main()
{
int m,n;
long long ans=0;
long long ma;
cin>>m>>n;
int n1,n2,i,j,k;
for(i=1;i<=m;i++){
for(j=1;j<=n;j++){
scanf("%d",&e[i][j]);
d[i][j]+=d[i][j-1]+e[i][j];//前缀和
}
}
for(n1=1;n1<=n;n1++){//枚举n1,n2
for(n2=n1;n2<=n;n2++){
ma=0;
for(k=1;k<=m;k++){//结合图理解
ma+=d[k][n2]-d[k][n1-1];
if(ma<0) ma=0;
if(ma>ans) ans=ma;
}
}
}
cout<<ans<<endl;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· MySQL下200GB大表备份,利用传输表空间解决停服发版表备份问题
· 记一次 .NET某固高运动卡测试 卡慢分析
· 微服务架构学习与思考:微服务拆分的原则
· 记一次 .NET某云HIS系统 CPU爆高分析
· 如果单表数据量大,只能考虑分库分表吗?
· 7 个最近很火的开源项目「GitHub 热点速览」
· DeepSeekV3:写代码很强了
· 记一次 .NET某固高运动卡测试 卡慢分析
· Visual Studio 2022 v17.13新版发布:强化稳定性和安全,助力 .NET 开发提
· MySQL下200GB大表备份,利用传输表空间解决停服发版表备份问题