【二维树状数组】hdu 1559 最大子矩阵
来源:互联网 发布:苹果手机模拟器mac版 编辑:程序博客网 时间:2024/05/19 01:06
最大子矩阵
Time Limit: 30000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 5040 Accepted Submission(s): 2641
Total Submission(s): 5040 Accepted Submission(s): 2641
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
14 5 2 23 361 649 676 588992 762 156 993 169662 34 638 89 543525 165 254 809 280
Sample Output
2474
///AC代码
#include <iostream>#include <set>#include <map>#include <stack>#include <cmath>#include <queue>#include <cstdio>#include <bitset>#include <string>#include <vector>#include <iomanip>#include <cstring>#include <algorithm>#include <functional>#define PI acos(-1)#define eps 1e-8#define inf 0x3f3f3f3f#define debug(x) cout<<"---"<<x<<"---"<<endltypedef long long ll;using namespace std;int arr[1010][1010], m, n, x, y;int lowbit(int x){ return x & -x;}///二维树状数组inline void add(int x, int y, int tt) ///单点修改{ for (int i = x; i < m; i += lowbit(i)) for (int j = y; j < n; j += lowbit(j)) { arr[i][j] += tt; }}inline int sum(int x, int y){ int res = 0; for (int i = x; i; i -= lowbit(i)) for (int j = y; j; j -= lowbit(j)) { res += arr[i][j]; } return res;}inline int query(int L, int B, int R, int T) ///矩阵求和{ return sum(R, T) + sum(L - 1, B - 1) - sum(R, B - 1) - sum(L - 1, T);}int main(){ int t; scanf("%d", &t); while (t--) { scanf("%d%d%d%d", &m, &n, &x, &y); for (int i = 1; i <= m; i++) { for (int j = 1; j <= n; j++) { arr[i][j] = 0; } } int k, ans = 0, gg; for (int i = 1; i <= m; i++) { for (int j = 1; j <= n; j++) { scanf("%d", &k); add(i, j, k); } } for (int i = 1; i + x - 1 <= m; i++) { for (int j = 1; j + y - 1 <= n; j++) { gg = query(i, j, i + x - 1, j + y - 1); ans = max(ans, gg); } } printf("%d\n", ans); } return 0;}
阅读全文
0 0
- hdu 1559 最大子矩阵(二维树状数组)
- HDU 1559 最大子矩阵 [二维树状数组]【数据结构】
- 【HDU 1559】最大子矩阵(二维树状数组)
- hdu 1559 最大子矩阵(二维树状数组)
- 【二维树状数组】hdu 1559 最大子矩阵
- HDU1559 最大子矩阵(二维树状数组)
- HDU1559 最大子矩阵 (二维树状数组)
- 最大子矩阵(二维树状数组)
- 二维树状数组--子矩阵求和
- 100道动态规划——21 HDU 1559 最大子矩阵和 树状数组 最大连续子区间和
- 二维数组和最大的子矩阵
- 二维数组最大子矩阵的求和
- 二维数组最大子矩阵和
- HDU 1505 求最大子矩阵(二维)
- HDU 1559 二维树状数组
- 最大二维子矩阵
- 求二维数组最大子数组和(或矩阵的最大子矩阵和)
- 最大子矩阵 hdu 1559
- 回溯算法
- TensorFlow教程 4 Tensorboard 可视化好帮手
- maven手动安装jar包
- LeetCode(15)--3Sum
- 手机通讯录
- 【二维树状数组】hdu 1559 最大子矩阵
- Android Studio最全解析
- java实现十进制整数或小数转换成二进制
- 我家WIFI竟然有Freestyle!
- mosquitto源码编译依赖项
- mysql--数据查询语言DQL
- [PHP]操作xml示例
- PHP针对HTML实体字符的转义函数
- DBhelp