hdu1081求最大子矩阵的和,DP
来源:互联网 发布:中国同性题材网络剧 编辑:程序博客网 时间:2024/06/14 18:34
思路:对于n行n列的矩阵求最大子矩阵和,则子矩阵必定是第i列到第j列,第a行到第b行,如果把每一行第i列到第j列的值计算好和作为一个值(即把这几列的数压缩成一个数),不就变成求前n行的子序列的最大和,就和hdu1003一样了http://acm.hdu.edu.cn/showproblem.php?pid=1003//或者压缩行,求前n列的最大子序列和。
代码:
压缩列:
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<string>#include<queue>#include<algorithm>#include<map>#include<iomanip>#define INF 999999999using namespace std;const int MAX=101;int s[MAX][MAX];int main(){int n,m;while(cin>>n){for(int i=0;i<n;++i){for(int j=0;j<n;++j)scanf("%d",&s[i][j]);}int sum=0,Max=-INF,num;for(int i=0;i<n;++i){for(int j=i;j<n;++j){sum=0;for(int k=0;k<n;++k){//求前k行第i列到第j列的子矩阵的最大和 num=0;for(int a=i;a<=j;++a)num+=s[k][a];//求第k行第i列到第j列的值 sum=sum+num>num ? sum+num : num;Max=sum>Max ? sum : Max;}}}cout<<Max<<endl;}return 0;}压缩行:
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<string>#include<queue>#include<algorithm>#include<map>#include<iomanip>#define INF 999999999using namespace std;const int MAX=101;int s[MAX][MAX];int main(){int n,m;while(cin>>n){for(int i=0;i<n;++i){for(int j=0;j<n;++j)scanf("%d",&s[i][j]);}int sum=0,Max=-INF,num;for(int i=0;i<n;++i){for(int j=i;j<n;++j){sum=0;for(int k=0;k<n;++k){num=0;for(int a=i;a<=j;++a)num+=s[a][k];sum=sum+num>num ? sum+num : num;Max=sum>Max ? sum : Max;}}}cout<<Max<<endl;}return 0;}在输入的时候就压缩矩阵(此处是压缩列),效率更高:
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<string>#include<queue>#include<algorithm>#include<map>#include<iomanip>#define INF 99999999using namespace std;const int MAX=101;int sum[MAX][MAX];int main(){int n,a;while(cin>>n){for(int i=0;i<n;++i){for(int j=1;j<=n;++j){scanf("%d",&a);sum[i][j]=sum[i][j-1]+a;}}int num=0,Max=-INF;for(int i=0;i<n;++i){for(int j=i+1;j<=n;++j){num=0;for(int k=0;k<n;++k){num=num+sum[k][j]-sum[k][i]>sum[k][j]-sum[k][i] ? num+sum[k][j]-sum[k][i] : sum[k][j]-sum[k][i];Max=num>Max ? num : Max;}}}cout<<Max<<endl;}return 0;}
- hdu1081求最大子矩阵的和,DP
- HDU1081 && POJ1050(求最大子矩阵和)
- hdu1081求最大子矩阵
- hdu1081最大子矩阵和
- hdu1081 To The Max--DP(最大子矩阵和)
- hdu1081 最大子矩阵
- hdu1081 最大子矩阵和(DP动态规划 最大子序列和变形题)
- hdu1081(最大子矩阵和)
- poj 1050 求矩阵最大的子矩阵和 DP
- hdu1081(最大子矩阵)
- 【最大子矩阵和】HDU1081-To The Max
- hdu1081 To The Max(最大子矩阵和)
- HDU1081二维子数组最大和/压缩/动态规划/DP
- NYOJ104 最大和(dp+求最大子矩阵)
- nyoj 104 最大和 【压缩矩阵 DP求最大连续子序列的和】
- 求子矩阵的最大和
- 求最大子矩阵的和
- 动态规划(DP)——HDU1081、PKU1050 To The Max 最大子矩阵问题
- oracle中 connect by prior
- SNMP(MIB(OID)& SMI & SNMP)
- hdu 3416 最短路+最大流
- 天水的骄傲-历史名将-姜维
- HDU1073:Online Judge
- hdu1081求最大子矩阵的和,DP
- VisionMobile:电信运营商创新工具箱(五)第三章:模块化的运营商
- 如何向妻子解释OOD
- 博客搬家
- SQL Server 和Oracle 数据类型对应
- 记录一下八款开源 Android 游戏引擎
- 怎么搭建 Octopress 在 Github 仅供学习
- matlab的基本用法
- ASP.NET AJAX中UpdatePanel的工作原理