公司网站站群是什么,中国品牌100强排名,邯郸哪儿做网站便宜,网页美工培训哪里好题干#xff1a;
给你一个mn的整数矩阵#xff0c;在上面找一个xy的子矩阵#xff0c;使子矩阵中所有元素的和最大。
Input
输入数据的第一行为一个正整数T#xff0c;表示有T组测试数据。每一组测试数据的第一行为四个正整数m,n,x,y#xff08;0m,n1000 AND 0…题干
给你一个m×n的整数矩阵在上面找一个x×y的子矩阵使子矩阵中所有元素的和最大。
Input
输入数据的第一行为一个正整数T表示有T组测试数据。每一组测试数据的第一行为四个正整数m,n,x,y0m,n1000 AND 0xm AND 0yn表示给定的矩形有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
解题报告 预处理一个前缀和然后O1查询就行了。四个月前写的题今天在学最小环问题的时候忽然发现了emmm拿出来写一个博客吧
AC代码
#includebits/stdc.h
#define ll long long
using namespace std;
const int MAX 1e3 5;
const int INF 0x3f3f3f3f;
ll a[MAX][MAX];int main()
{int t;int m,n,x,y;ll maxx;cint;while(t--) {maxx -INF;scanf(%d%d%d%d,m,n,x,y);for(int i 1; im; i) {for(int j 1; jn; j) {scanf(%lld,a[i][j]);}}for(int i 1; im; i) {for(int j 1; jn; j) {a[i][j] a[i][j] a[i-1][j] a[i][j-1] - a[i-1][j-1];}}//从ij开始 到 ix-1jy-1 for(int i 1; im-x1; i) {for(int j 1; jn-y1; j) {maxx max(maxx,a[ix-1][jy-1]-a[ix-1][j-1]-a[i-1][jy-1]a[i-1][j-1]);}}printf(%lld\n,maxx);}return 0 ;
}