霰弹枪[二维的前缀和]

在clyz有一个很厉害的枪手叫做东哥,他的女神qy被本地一个著名的黑帮老大XXX给绑架了,东哥急切地想要找回qy,向椅子买了几件武器。因为首先要轰开clyz的大门,所以他选择了霰弹枪。clyz的大门由N*M块石头组成,而东哥的体积为R行C列(东哥不可被切开),他为了省子弹,他只能轰出一个恰好自己通过的洞,每块石头的价值不同,打碎可获得的金钱也不同,东哥要攒钱买武器,所以要选择轰最大价值的一部分石头,现在他想要知道自己能够获得多少金钱购买下一把武器。

输入格式

第1行:4个正整数N,M,R,C

第2..N+1行:每行M个正整数,第i+1行第j个数表示num[i][j]

输出格式

第1行:1个整数,表示东哥最多能获得的金钱

输入样例

3 5 2 3

5 2 7 1 1

5 9 5 1 5

3 5 1 5 3

输出样例

33

数据范围

对于60%的数据:1 <= N,M <= 200

对于100%的数据:1 <= N,M <= 1,000

1 <= R <= N, 1 <= C <= M

1 <= num[i][j] <= 1000

保证结果不超过2,000,000,000

时间: 2024-11-05 13:41:37

霰弹枪[二维的前缀和]的相关文章

洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP

题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N x N 的方格.输入数据中包括有树的方格的列表.你的任务是计算并输出,在他的农场中,不需要砍树却能够修建的最大正方形牛棚.牛棚的边必须和水平轴或者垂直轴平行. EXAMPLE 考虑下面的方格,它表示农夫约翰的农场,‘.'表示没有树的方格,‘#'表示有树的方格 1 2 3 4 5 6 7 8 1 .

CF427 C star sky 二维数组前缀和

用pre[t][i][j]存时间等价于t时坐标(1, 1) 和(i, j)组成的矩形区域的星星总亮度.再注意一下一个坐标处可以有多颗星星就可以了. star sky 1 // http://codeforces.com/contest/835/problem/C 2 #include <cstdio> 3 #include <cstring> 4 const int M = 12, N = 102; 5 int pre[M][N][N]; 6 int main() 7 { 8 in

hdu1081 DP类最长子段和(二维压缩+前缀和数组/树状数组计数)

题意:给出一个 n * n 的数字矩阵,问最大子矩阵和是多少. 由于和最长子段和问题类似,一开始想到的就是 DP ,一开始我准备用两个循环进行 DP ,对于每一个 (i,j) ,考察(i - 1,j)与(i,j - 1), dp 值代表以该点为右下角的最大矩阵和,同时记录下这个矩阵的左上角坐标,状态转移时通过将原和最大矩阵通过补边推到当前和最大矩阵.但是其实这种做法有一个明显的问题,就是转移时,补上边后 dp 值相同怎么办,dp 值相同而矩阵不同的话会影响到下一次状态转移后补上的矩阵的情况,从而

二维数组前缀和

给定一个矩阵,求子矩阵元素之和. 可以暴力遍历,但是一般题目时间上不会允许你这么做. 通过预处理二维数组使得需要子矩阵之和时以O(1)直接求. 输入: for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin >>map[i][j]; 记dp[i][j]表示左上坐标(1,1),右下坐标(i,j)的子矩阵,map[i][j]表示矩阵(i,j)位置上的元素. 那么通过:dp[i][j]=dp[i][j-1]+dp[i-1][j]-dp[i-1][j

二维差分前缀和——cf1202D(好题)

直接枚举每个点作为左上角是可以做的,但是写起来较麻烦 有一种较为简单的做法是对一列或一行统计贡献 比如某一行的B存在的区间是L,R那么就有三种情况 1.没有这样的区间,即一行都是W,此时这行对答案的贡献一直是1 2.R-L+1<=k,那么这一段必须要找一个点代表的矩形来覆盖,可以求出这样的点的存在区间是一个矩形,当且仅当点在这个矩形范围内时,这一行会有1的贡献. 3.R-L+1>k,永远不会有贡献 对于情况2,我们用二维的差分来统计一下,最后枚举每个点,看我们选择这个点代表的矩形时,贡献是否达

二维区间前缀和更新与维护

题目描述 White Rabbit has a rectangular farmland of n*m. In each of the grid there is a kind of plant. The plant in the j-th column of the i-th row belongs the a[i][j]-th type.White Cloud wants to help White Rabbit fertilize plants, but the i-th plant ca

垃圾炸弹(二维前缀和)

题目描述 2014年足球世界杯(2014 FIFA World Cup)开踢啦!为了方便球迷观看比赛,街道上很多路口都放置了的直播大屏幕,但是人群散去后总会在这些路口留下一堆垃圾.为此政府决定动用一种最新发明--"垃圾炸弹".这种"炸弹"利用最先进的量子物理技术,爆炸后产生的冲击波可以完全清除波及范围内的所有垃圾,并且不会产生任何其他不良影响.炸弹爆炸后冲击波是以正方形方式扩散的,炸弹威力(扩散距离)以d给出,表示可以传播d条街道.例如下图是一个d=1的"

Codeforces 611C New Year and Domino(二维前缀和)

题目大概说给一个n*m个格子,格子'.'表示可以放东西,多次询问矩形区域(x1,y1)-(x2,y2)有几种放一张1*2的骨牌的方案数. 分别考虑横着竖着放,预处理出二维的前缀和,即sum[x][y]表示(1,1)-(x,y)的横着或者竖着放的方案数,然后对于每一个询问就拆成几个前缀和容斥一下.. 细节要注意..骨牌是1*2的.. 1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 char map[555

openjudge1768 最大子矩阵[二维前缀和or递推|DP]

总时间限制:  1000ms 内存限制:  65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵. 比如,如下4 * 4的矩阵 0 -2 -7 09 2 -6 2-4 1 -4 1-1 8 0 -2 的最大子矩阵是 9 2-4 1-1 8 这个子矩阵的大小是15. 输入 输入是一个N * N的矩阵.输入的第一行给出N (0 < N <= 100).再后面的若干行中,依次(首先从左到右给出第一行的N个整数,再从左到右给