最大子矩阵 hdu 1559 poj 1050
来源:互联网 发布:信用卡淘宝买东西套现 编辑:程序博客网 时间:2024/06/06 02:11
dp poj 1050(To the Max)
hdu 1559 (最大子矩阵)
题意:给出一个二维数组,问最大子矩阵的和是多少。hdu 规定了子矩阵的边界。
题解:poj 将二维转化为一维,相当于求最大连续子序列,可以把每行的和求出来,b[i][j] 代表第i行前j个数的和,
然后根据一维的方法,求出i到j行列的最大和。
<span style="font-size:18px;"><span style="font-size:18px;">#include<cstdio>using namespace std;int main(){int n,i,j,k,s;int maxi=0;int a[110][110]={0};int b[110][110]={0};scanf ("%d",&n);for (i=0;i<n;i++){for (j=1;j<=n;j++){scanf ("%d",&a[i][j-1]);b[i][j]=b[i][j-1]+a[i][j-1];}}for (i=0;i<n;i++){for (j=i;j<=n;j++){s=0;for (k=0;k<n;k++){s+=b[k][j]-b[k][i];if (s<0)s=0;else if (s>maxi)maxi=s;}}}printf ("%d\n",maxi);return 0;} </span></span>
题解:hdu dp[i][j]代表长i宽j的矩阵和(dp [i] [j] += dp [i-1] [j] + dp [i] [j-1] - dp [i-1] [j-1]) (dp[i-1][j-1])为重复部分。a[i][j]为右下角的元素。
所以长x宽j的矩阵和就是(dp [i] [j] - dp [i-x] [j] - dp [i] [j-y] + dp [i-x] [j-y])
详细题解
<span style="font-size:18px;">#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;int dp[1100][1100];int MAX;int main(){ int i,j,n,m,T,x,y; scanf("%d",&T); while(T--) { scanf("%d %d %d %d",&n,&m,&x,&y); MAX=0; memset(dp,0,sizeof(dp)); for(i=1;i<=n;i++) for(j=1;j<=m;j++) { scanf("%d",&dp[i][j]); dp[i][j]+=dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1]; if(i>=x&&j>=y) { MAX=max(MAX,dp[i][j]-dp[i][j-y]-dp[i-x][j]+dp[i-x][j-y]); } } printf("%d\n",MAX); } return 0;}</span>
0 0
- 最大子矩阵 hdu 1559 poj 1050
- POJ 1050 最大子矩阵
- poj 1050最大子矩阵
- 最大子矩阵 hdu 1559
- HDU 1559 最大子矩阵
- HDU 1559 最大子矩阵
- HDU 1559 最大子矩阵
- hdu 1559 最大子矩阵
- HDU 1559 最大子矩阵
- HDU-1559最大子矩阵
- hdu 1559 最大子矩阵
- HDU 1559 最大子矩阵
- hdu 1559 最大子矩阵
- hdu 1559 最大子矩阵
- HDU 1559 最大子矩阵
- hdu 1559最大子矩阵
- HDU 1559 最大子矩阵
- HDU 1559 最大子矩阵
- POJ 1236 Network of Schools(使DAG强联通最小加边数)
- 时间计算
- POJ 2983 Is the Information Reliable?(差分约束)
- poj 1006中国剩余定理的应用
- c语言斐波那契数列
- 最大子矩阵 hdu 1559 poj 1050
- 使用自己的模块
- Head First 工厂模式
- 洛谷U3981 语文 DFS序+线段树
- C++ 获取系统时间
- 数据库操作
- Andriod 中JNI的简单应用(HelloWorld)
- Django中project下的url引入(include)app下的url
- WireLess LowerPower 实现方法