杭电1559
来源:互联网 发布:tk域名怎么解析 编辑:程序博客网 时间:2024/05/29 07:31
这是一道比较基础的子序列的问题,当然了,数据是比较大的如果直接暴力的话就会TEL的,所以还需要讲究一点策略。这个前面也已经出现过不少吧。这个问题就相当于DP里面的另一类问题状态压缩。这个想法是一样的他要求的的就是一个x*y的矩阵,那么我们就是先将需要求得矩阵的个边的和都求出来。我们所说的矩阵X*Y的意识就是有x行y列,并不是说可以调换来。当然这里的话我们采用横向和纵向相加的做法是一样的,最后的结果也是一样的,我这里就是横向相加。这样的话,就可以减少一个数量级的计算。所以就可以飘过不至于TEL。这个相加之后的结果处理就是自己需要考虑的的事情只要你自己不想错就可以做出来。说到这里也基本有了一个思路,知道思路之后大家下面就应该自己思考了。但是下面还是给一个AC的代码仅供参考:
#include<iostream>using namespace std;#include<cstdlib>const int Max=1002;int a[Max][Max];int b[Max][Max];int c[Max][Max];int main(){ int T; int i,j,k,num; cin>>T; int m,n,x,y; int i1,j1; int i2,j2; while(T--) { i1=j1=0; k=0; num=0; scanf("%d%d%d%d",&m,&n,&x,&y); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); memset(a,0,sizeof(a)); for(i=0;i<m;i++) for(j=0;j<n;j++) { scanf("%d",&a[i][j]); b[i][j]=a[i][j]; c[i][j]=a[i][j]; } for(i=1;i<m;i++) for(j=0;j<n;j++) { b[i][j]+=b[i-1][j];//表示行的相加; } for(j=0;j<=n-y;j++) for(i=x-1;i<m;i++) { num=0; i1=0; j1=0; if(i==x-1) { for(j2=j;j2<j+y;j2++) i1+=b[i][j2]; num=i1; } else { for(j2=j;j2<j+y;j2++) { i1+=b[i][j2]; j1+=b[i-x][j2]; } num=i1-j1; } if(num>k) k=num; } cout<<k<<endl; } return 0;}
0 0
- 杭电1559
- 杭电
- 杭电
- 杭电
- 【杭电1559】最大子矩阵
- ***【杭电1559】最大子矩阵
- 杭电-1559 最大子矩阵
- 杭电 1234 和 杭电 2115
- 杭电2056之Rectangles 杭电
- 杭电ACM1061Rightmost Digit
- 杭电2099 7.11
- 杭电ACM 1003
- 杭电 ACM 2016
- 杭电ACM1466
- 杭电ACM1003
- 杭电ACM1225
- 杭电ACM2023
- 杭电ACM2602
- linux后台进程管理
- phpcms标签整理
- 跨平台框架Cordova概述
- Java快速排序的实现和时间空间复杂度分析
- android_开发_EditText_and_TextView属性
- 杭电1559
- C语言函数的递归调用
- 常见标点符号的英文表述
- 对数线性模型之一(逻辑回归), 广义线性模型学习总结
- Activity切换效果(overridePendingTransition)
- 黑马程序员_泛型
- java float double
- linux网络编程之sockaddr、sockaddr_in和sockaddr_un
- ASP.NET MVC3 加 Unity2.1.505.0 依敕注入 Web.config 配置 简例Hello Unity2.1