HDOJ1559最大子阵
2011-12-23 13:15
323 查看
题目:
Total Submission(s): 1367 Accepted Submission(s): 721
Problem Description
给你一个m×n的整数矩阵,在上面找一个x×y的子矩阵,使子矩阵中所有元素的和最大。
Input
输入数据的第一行为一个正整数T,表示有T组测试数据。每一组测试数据的第一行为四个正整数m,n,x,y(0<m,n<1000 AND 0<x<=m AND 0<y<=n),表示给定的矩形有m行n列。接下来这个矩阵,有m行,每行有n个不大于1000的正整数。
Output
对于每组数据,输出一个整数,表示子矩阵的最大和。
Sample Input
Sample Output
Author
lwg
Source
HDU 2006-12 Programming Contest
Recommend
LL
本题是一个最大子序列的简化版 给定了子阵的行数和列数
所以基本都不是动态规划了~~~
源代码:
#include<iostream>
using namespace std;
int a[1100][1100];//输入数组
int s[1100][1100];//每行从开始到每个位置的和
int main()
{
int m,n,x,y;
int t;
cin>>t;
while(t--)
{
cin>>m>>n>>x>>y;
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
cin>>a[i][j];
if(j==0)/////////////////计算每行从开始至j的和
{
s[i][j]=a[i][j];
}
else
{
s[i][j]=s[i][j-1]+a[i][j];
}
}
}
int res=0;
for(i=0;i<n-y+1;i++)/////////计算从i开始的y列的最大子序列和
{
int sum=0;
for(j=0;j<x;j++)
{
if(i>0)
{
sum+=(s[j][i+y-1]-s[j][i-1]);
}
else
{
sum+=s[j][i+y-1];
}
}
if(sum>res)
{
res=sum;
}
for(;j<n;j++)
{
if(i>0)
{
sum+=(s[j][i+y-1]-s[j][i-1]);
sum-=(s[j-x][i+y-1]-s[j-x][i-1]);
}
else
{
sum+=(s[j][i+y-1]);
sum-=(s[j-x][i+y-1]);
}
if(sum>res)
{
res=sum;
}
}
}
cout<<res<<endl;
}
return 0;
}
最大子矩阵
Time Limit: 30000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1367 Accepted Submission(s): 721
Problem Description
给你一个m×n的整数矩阵,在上面找一个x×y的子矩阵,使子矩阵中所有元素的和最大。
Input
输入数据的第一行为一个正整数T,表示有T组测试数据。每一组测试数据的第一行为四个正整数m,n,x,y(0<m,n<1000 AND 0<x<=m AND 0<y<=n),表示给定的矩形有m行n列。接下来这个矩阵,有m行,每行有n个不大于1000的正整数。
Output
对于每组数据,输出一个整数,表示子矩阵的最大和。
Sample Input
14 5 2 23 361 649 676 588992 762 156 993 169662 34 638 89 543525 165 254 809 280
Sample Output
2474
Author
lwg
Source
HDU 2006-12 Programming Contest
Recommend
LL
本题是一个最大子序列的简化版 给定了子阵的行数和列数
所以基本都不是动态规划了~~~
源代码:
#include<iostream>
using namespace std;
int a[1100][1100];//输入数组
int s[1100][1100];//每行从开始到每个位置的和
int main()
{
int m,n,x,y;
int t;
cin>>t;
while(t--)
{
cin>>m>>n>>x>>y;
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
cin>>a[i][j];
if(j==0)/////////////////计算每行从开始至j的和
{
s[i][j]=a[i][j];
}
else
{
s[i][j]=s[i][j-1]+a[i][j];
}
}
}
int res=0;
for(i=0;i<n-y+1;i++)/////////计算从i开始的y列的最大子序列和
{
int sum=0;
for(j=0;j<x;j++)
{
if(i>0)
{
sum+=(s[j][i+y-1]-s[j][i-1]);
}
else
{
sum+=s[j][i+y-1];
}
}
if(sum>res)
{
res=sum;
}
for(;j<n;j++)
{
if(i>0)
{
sum+=(s[j][i+y-1]-s[j][i-1]);
sum-=(s[j-x][i+y-1]-s[j-x][i-1]);
}
else
{
sum+=(s[j][i+y-1]);
sum-=(s[j-x][i+y-1]);
}
if(sum>res)
{
res=sum;
}
}
}
cout<<res<<endl;
}
return 0;
}
相关文章推荐
- hdoj 1559 最大子矩阵
- HDOJ-----1559最大子矩阵
- HDOJ 题目1559 最大子矩阵(dp)
- hdoj1559最大子矩阵
- HDOJ 1559 最大子矩阵
- hdoj 1559 最大子矩阵 [dp]
- hdoj.1559 最大子矩阵 20140813
- hdoj 1559 最大子矩阵 【矩阵压缩 DP】
- HDU 1559 最大子矩阵【最大子阵和②】
- hdoj 1864 最大报销额【01背包】
- HDOJ 3416 Marriage Match IV【最短路+最大流】
- hdu 1559 最大子矩阵 (简单dp)
- HDOJ 4888 Redraw Beautiful Drawings 最大流 dinic+当前弧优化
- 最大子阵
- hdoj2136 求数的最大素数因子
- HDU 1559最大矩阵和
- hdoj 1231 最大连续子序列
- 蓝桥杯---最大子阵
- [HDOJ 4940] Destroy Transportation system [最大流]
- HDOJ 3605 - Escape 状态压缩缩点+最大流