博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 1559(最大子矩阵)
阅读量:5165 次
发布时间:2019-06-13

本文共 1984 字,大约阅读时间需要 6 分钟。

最大子矩阵

Time Limit: 30000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 3906    Accepted Submission(s): 1994

Problem Description
给你一个m×n的整数矩阵,在上面找一个x×y的子矩阵,使子矩阵中所有元素的和最大。
 

 

Input
输 入数据的第一行为一个正整数T,表示有T组测试数据。每一组测试数据的第一行为四个正整数m,n,x,y(0<m,n<1000 AND 0<x<=m AND 0<y<=n),表示给定的矩形有m行n列。接下来这个矩阵,有m行,每行有n个不大于1000的正整数。
 

 

Output
对于每组数据,输出一个整数,表示子矩阵的最大和。
 

 

Sample Input
1 4 5 2 2 3 361 649 676 588 992 762 156 993 169 662 34 638 89 543 525 165 254 809 280
 

 

Sample Output
2474
 

 

Author
lwg
 

 

Source
 
很多方法,二维树状数组,DP,二维RMQ。。。数据很水,二维树状数组491MS,有时间在补二维RMQ,dp解法
#include
#include
#include
#include
#define N 1005using namespace std;int C[N][N];int n,m,x,y;int lowbit(int x1){ return x1&(-x1);}int update(int x1,int y1,int value){ for(int i=x1;i<=n;i+=lowbit(i)){ for(int j=y1;j<=m;j+=lowbit(j)){ C[i][j]+=value; } }}int getSum(int x1,int y1){ int value = 0; for(int i=x1;i>=1;i-=lowbit(i)){ for(int j=y1;j>=1;j-=lowbit(j)){ value+=C[i][j]; } } return value;}int main(){ int tcase; scanf("%d",&tcase); while(tcase--){ memset(C,0,sizeof(C)); scanf("%d%d%d%d",&n,&m,&x,&y); int num; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ scanf("%d",&num); update(i,j,num); } } int mx = -1; for(int i=1;i<=n;i++){ if(i+x-1>n) continue; for(int j=1;j<=m;j++){ if(j+y-1>m) continue; int x1 = i; int x2 = i+x-1; int y1 = j; int y2 = j+y-1; int sum = getSum(x2,y2)-getSum(x1-1,y2)-getSum(x2,y1-1)+getSum(x1-1,y1-1); //printf("%d\n",sum); if(sum>mx) mx = sum; } } printf("%d\n",mx); } return 0;}

 

转载于:https://www.cnblogs.com/liyinggang/p/5399600.html

你可能感兴趣的文章
配置Hadoop1.2.1
查看>>
php缓存
查看>>
ISP中去马赛克-demosiac入门
查看>>
协程之生成器
查看>>
golang数组与切片
查看>>
SpringBoot简单的REST风格例子
查看>>
NEMA-0183(GPRMC GPGGA)详细解释
查看>>
imsdroid 学习(初认识)
查看>>
DB_Links创建际删除
查看>>
ajax jsonp跨域
查看>>
Flex布局新旧混合写法详解(兼容微信)
查看>>
activemq 的那些事1
查看>>
Android MIFARE NFCA源码解析
查看>>
IOS TextField设置大全
查看>>
Webmin|Linux管理员远程管理工具
查看>>
关于程序员的几点思考
查看>>
高级组件——菜单栏JMenuBar
查看>>
C++ 中的模板类声明头文件和实现文件分离后,如何能实现正常编译?
查看>>
C# 波形绘制
查看>>
uva 1267
查看>>