HDU 1559 最大子矩阵
2015-09-14 22:17
363 查看
题意:RT
分析:刚开始准备用DP做,想了很久,有了思路,去打代码还是有点困难,很多细节不好处理(还是自己太弱),结果居然让我想出了二维树状数组,瞬间秒过
分析:刚开始准备用DP做,想了很久,有了思路,去打代码还是有点困难,很多细节不好处理(还是自己太弱),结果居然让我想出了二维树状数组,瞬间秒过
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; #define N 1005 int add ; int lower_bit(int i) { return i&(-i); } void updata(int L,int R,int c) { for(int i=L;i<=N;i+=lower_bit(i)) { for(int j=R;j<=N;j+=lower_bit(j)) { add[i][j]+=c; } } } int sum(int x,int y) { int s=0; for(int i=x;i>0;i-=lower_bit(i)) { for(int j=y;j>0;j-=lower_bit(j)) { s+=add[i][j]; } } return s; } int main() { int t; scanf("%d",&t); while(t--) { int m,n,x,y; scanf("%d%d%d%d",&m,&n,&x,&y); int v; int i,j; memset(add,0,sizeof(add)); for(i=1;i<=m;i++) { for(j=1;j<=n;j++) { scanf("%d",&v); updata(i,j,v); } } int M=0; for(i=1;i<=m-x+1;i++) { for(j=1;j<=n-y+1;j++) { int x1,y1,x2,y2; x1=i; y1=j; x2=i+x-1; y2=j+y-1; int s=(sum(x2,y2)-sum(x2,y1-1)-sum(x1-1,y2)+sum(x1-1,y1-1)); M=max(M,s); } } printf("%d\n",M); } return 0; }
相关文章推荐
- C++的STL进一步总结之map
- Nginx 日志格式剖析
- 海明校验码——如何求解
- 限制UITextView中的字数
- hdu 5438Ponds
- https://github.com/i66soft/osharp
- StyleCop默认的规 4000 则
- 洛谷1005 矩阵取数游戏(dp+高精)
- Android-网络编程基础
- GIS开源类库
- vim编辑十六进制文件
- xib、stroyboard加载view、viewController
- ZOJ 3199 Longest Repeated Substring
- C栈stack
- 程序员健康指南
- Java MyLinkedList 示例
- SQL Server 2012 AlwaysOn高可用配置之二:安装数据库功能
- SQL Server 2012 AlwaysOn高可用配置之二:安装数据库功能
- noip2006 开心的金明 (01背包)
- 4、网络-