HDU 1081(最大子矩阵问题)
来源:互联网 发布:vscode 内置web服务器 编辑:程序博客网 时间:2024/06/08 19:22
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1081
将其转化为最大连续子序列的和的问题
首先要求出从(1,1)一直到(i,j)每块的和;
p[i][j]=p[i-1][j]+p[i][j-1]-p[i-1][j-1]+a[i][j];
然后按照最大字段和的思路求解
注意 每个连续的子段的和 i->j行 k->m列
sum = p[j][m]-p[i-1][m]-p[j][k-1]+p[i-1][k-1];
红色部分自己画一下很容易理解的.
#include <iostream>#include <cstring>#include <cstdio>using namespace std;const int INF = -1e9;int a[101][101];int p[101][101];int max_recsum(int n){ for(int i=0;i<=n;i++) { p[i][0]=0; p[0][i]=0; } for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) p[i][j]=p[i-1][j]+p[i][j-1]-p[i-1][j-1]+a[i][j]; int maxn=INF; for(int i=1;i<=n;i++) { for(int j=i;j<=n;j++) { int sum=0; for(int k=1;k<=n;k++) { int temp=p[j][k]-p[j][k-1]-p[i-1][k]+p[i-1][k-1]; if(sum>=0) sum+=temp; else sum=temp; if(maxn<sum) maxn=sum; } } } return maxn;}int main(){ int n; while(cin>>n) { for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>a[i][j]; int t=max_recsum(n); /*for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) cout<<p[i][j]<<" "; cout<<endl; }*/ cout<<t<<endl; } return 0;}
0 0
- HDU 1081(最大子矩阵问题)
- 最大子矩阵问题hdu 1081
- hdu 1081 最大子矩阵求和问题
- HDU ACM 1081 最大子矩阵问题
- hdu 1081(最大子矩阵)
- HDU 1081 最大子矩阵
- 最大子矩阵问题-hdu-1559
- HDU 1081 To The Max(最大子矩阵和)
- HDU 1081 To The Max(最大子矩阵)
- hdu 1081 To The Max(子矩阵最大和)
- hdu 1081 To The Max(最大子矩阵和)
- HDU 1081 To The Max--DP--(最大子矩阵)
- HDU 1081 最大子矩阵(LCS_DP+前缀和)
- hdu-1081 To The Max (最大子矩阵和)
- hdu 1081 最大子矩阵(二维前缀和优化)@
- hdu 1081 矩阵最大连续子序列
- hdu 1081 最大子矩阵和
- hdu 1081(最大子矩阵和)
- ssh: connect to host localhost port 22: Connection refused 问题
- android开发2-android项目结构
- 快速排序
- .pyc文件是什么?
- 大话设计模式之建造者模式
- HDU 1081(最大子矩阵问题)
- How to be a great software developer
- vim下接下Ctrl+S造成程序僵死
- position:fixed 固定定位(兼容IE6)问题及关闭浮动框的JS
- POJ 2676 Sudoku
- CCLabelTTF制造文字描边
- Xcode快捷键和手势
- android开发1-android开发环境的搭建
- 农民工为何不喜欢打工文学?