JZOJ 5838. 旅游路线 最大子段和
2024-08-27 20:33:01
Description
GZOI队员们到X镇游玩。X镇是一个很特别的城镇,它有m+1条东西方向和n+1条南北方向的道路,划分成m*n个区域,这些区域标从北到南、从西到东的坐标标识为从坐标 (1,1) 到坐标(m,n)。 GZOI队员们预先对这m*n个区域打分V(i,j)(分数可正可负)。分数越高表示他们越想到那个地方,越低表示他们越不想去。为了方便游玩,队员们需要选定一个连续的区域集合作为活动范围。例如,如果他们选择了最西北的区域(m1,nl)和最东南(m2,n2)区域(m1<=m2,n1<=n2),那他们的活动范围是 {D(i,j)|m1<=i<=m2,n1<=j<=n2},其游览总分则为这些活动范围的区域总分。 GZOI队员们希望他们活动范围内的区域的分值总和最大。你的任务是编写一个程序,求出他们的活动范围(m1,nl),(m2,n2〉。
Input
输入第一行为整数m(1<=m<=200),n(1<=n<=200),用空格隔开 下面为m行,每行有n列整数,其中第i行第j列的整数,代表V(i,j),每个整数之间用空格隔开,每个整数的范围是 [-200000,200000],输入数据保证这些整数中,至少存在一个正整数。
Output
输出只有一行,为最高的分值。
Sample Input
4 5
1 -2 3 -4 5
6 7 8 9 10
-11 12 13 14 -15
16 17 18 19 20
Sample Output
146
做法:最大子段和
代码如下:
#include <cstdio>
#include <iostream>
#include <cstring>
#define N 207
#define LL long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define max(a,b) (a)>(b)?(a):(b)
using namespace std;
int n,m,val[N][N];
LL f[N], Q[N][N], ans; void Init(){
scanf("%d%d",&n,&m);
rep(i,,n)
rep(j,,m){
scanf("%d",&val[i][j]);
Q[i][j]=Q[i-][j]+val[i][j];
}
} void Get(int up,int down){
rep(i,,m)
f[i]=Q[down+up][i]-Q[up-][i];
LL sum=;
rep(i,,m){
if(sum+f[i]>) sum+=f[i],ans=max(ans,sum);
else sum=;
} } void Work(){
rep(i,,n)
rep(j,,n-i)
Get(i,j);
} int main(){
Init();
Work();
printf("%lld",ans);
}
最新文章
- [原]Redis主从复制各种环境下测试
- 通过PowerShell获取TCP响应(类Telnet)
- HRBUST 1430 矩阵快速幂
- MPlayerX For Mac白屏问题
- java String 空指针异常
- 转:基于Webrtc的跨平台实时语音通信解决方案(讲座)
- 结构体 typedef关键字
- crontab定时任务
- VR全景智慧城市——商家的需求才是全景市场的核心竞争力
- Let&#39;s Encrypt与DNS轮循
- 结合bootstrap fileinput插件和Bootstrap-table表格插件,实现文件上传、预览、提交的导入Excel数据操作流程
- Docker最佳实践-部署LNMP环境
- SQL Server将自己的查询结果作为待查询数据子列之二
- C语言第二次博客作业
- Java设计模式之十 ---- 访问者模式和中介者模式
- html 響應式web設計
- Android-认识Bitmap
- 2199: [Usaco2011 Jan]奶牛议会 2-sat
- java native方法与JNI实现
- Swift 开发中,为什么要远离 Heap?