B. Counting Rectangles is Fun----dp
来源:互联网 发布:网络综艺的优势有哪些 编辑:程序博客网 时间:2024/05/01 00:13
There is an n × m rectangular grid, each cell of the grid contains a single integer: zero or one. Let's call the cell on the i-th row and thej-th column as (i, j).
Let's define a "rectangle" as four integers a, b, c, d (1 ≤ a ≤ c ≤ n; 1 ≤ b ≤ d ≤ m). Rectangle denotes a set of cells of the grid{(x, y) : a ≤ x ≤ c, b ≤ y ≤ d}. Let's define a "good rectangle" as a rectangle that includes only the cells with zeros.
You should answer the following q queries: calculate the number of good rectangles all of which cells are in the given rectangle.
There are three integers in the first line: n, m and q (1 ≤ n, m ≤ 40, 1 ≤ q ≤ 3·105). Each of the next n lines contains m characters — the grid. Consider grid rows are numbered from top to bottom, and grid columns are numbered from left to right. Both columns and rows are numbered starting from 1.
Each of the next q lines contains a query — four integers that describe the current rectangle, a, b, c, d (1 ≤ a ≤ c ≤ n; 1 ≤ b ≤ d ≤ m).
For each query output an answer — a single integer in a separate line.
5 5 500101000000000101000000011 2 2 44 5 4 51 2 5 22 2 4 54 2 5 3
1017345
4 7 500001000000010001100000000001 7 2 73 1 3 12 3 4 51 2 2 72 2 4 7
31162752
For the first example, there is a 5 × 5 rectangular grid, and the first, the second, and the third queries are represented in the following image.
- For the first query, there are 10 good rectangles, five 1 × 1, two 2 × 1, two 1 × 2, and one 1 × 3.
- For the second query, there is only one 1 × 1 good rectangle.
- For the third query, there are 7 good rectangles, four 1 × 1, two 2 × 1, and one 3 × 1.
题目链接:http://codeforces.com/contest/372/problem/B
这个题当时确实没有想出来。
http://blog.csdn.net/u013912596/article/details/38796089
真的是,4D连续sum,涨姿势。
代码:
#include <iostream>#include <cstdio>#include <cstring>using namespace std;int row[50][50],a[50][50],dp[50][50][50][50];int main(){ int n,m,q; scanf("%d%d%d",&n,&m,&q); for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ scanf("%1d",&a[i][j]); row[i][j]=row[i][j-1]; if(a[i][j]) row[i][j]=0; else row[i][j]++; } } for(int a=1;a<=n;a++) for(int b=1;b<=m;b++) for(int c=a;c<=n;c++) for(int d=b;d<=m;d++){ dp[a][b][c][d]=dp[a][b][c][d-1]+dp[a][b][c-1][d]-dp[a][b][c-1][d-1]; int r=d-b+1; for(int e=c;e>=a;e--){ r=min(r,row[e][d]); dp[a][b][c][d]+=r; } } while(q--){ int a,b,c,d; scanf("%d%d%d%d",&a,&b,&c,&d); cout<<dp[a][b][c][d]<<endl; } return 0;}
- B. Counting Rectangles is Fun----dp
- CF 372B Counting Rectangles is Fun [dp+数据维护]
- CodeForces 372B. Counting Rectangles is Fun
- codeforces 372B B. Counting Rectangles is Fun(暴力)
- CF 372B Counting Rectangles is Fun(记忆化搜索)
- CF 373D Counting Rectangles is Fun 单调栈+DP
- Codeforces 373D Counting Rectangles is Fun【Dp】
- Codeforces 372B. Counting Rectangles is Fun【动态规划,暴力枚举】(lowbit()小用法)
- Codeforces Round #219 (Div. 2) D. Counting Rectangles is Fun
- Codeforce 373 D Counting Rectangles is Fun (统计全0子矩阵)
- Counting Kangaroos is Fun
- A. Counting Kangaroos is Fun
- Counting Rectangles
- CodeForces 372 A. Counting Kangaroos is Fun
- cf 372A Counting Kangaroos is Fun
- codeforces327A Counting Kangaroos is Fun【二分】
- 【CodeForces】[372A]Counting Kangaroos is Fun
- CodeForces 372 A Counting Kangaroos is Fun
- 读书笔记《Inside the C++ Object Model》:Copy Constructor的构造操作
- Axure RP 8基础教程-制作下拉菜单
- WebSocket
- 生成模型与判别模型优缺点
- 史上最简单的 MySQL 教程(二十九)「外键(下)」
- B. Counting Rectangles is Fun----dp
- Matlab---绘制图像
- 基于redis的延迟消息队列设计
- Struts标签、Ognl表达式、el表达式、jstl标签库这四者之间的关系和各自作用
- poj 3320 尺取法 + map + set
- C#打印功能的详细说明
- 百练 3726: 仙岛求药
- Vmware11+Win8.1+Mac配置网络
- [转]linux下使用tar命令