最大子矩阵(信息学奥赛一本通-T1224)
生活随笔
收集整理的這篇文章主要介紹了
最大子矩阵(信息学奥赛一本通-T1224)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【題目描述】
已知矩陣的大小定義為矩陣中所有元素的和。給定一個矩陣,你的任務是找到最大的非空(大小至少是1×11×1)子矩陣。
比如,如下4×4的矩陣
? 0 ?-2 ? -7 ? 0
? 9 ? 2 ? -6 ? 2?
-4 ? ?1 ? -4 ? 1
-1 ? ?8 ? ?0 ?-2
的最大子矩陣是
? 9 ? 2
-4 ? 1
-1 ? 8
這個子矩陣的大小是15。
【輸入】
輸入是一個N×N的矩陣。輸入的第一行給出N(0<N≤100)。再后面的若干行中,依次(首先從左到右給出第一行的N個整數,再從左到右給出第二行的N個整數……)給出矩陣中的N2個整數,整數之間由空白字符分隔(空格或者空行)。已知矩陣中整數的范圍都在[?127,127]。
【輸出】
輸出最大子矩陣的大小。
【輸入樣例】
4
0 -2 -7 ?0
9 ?2 -6 ?2
-4 ?1 -4 ?1
-1 ?8 ?0 -2
【輸出樣例】
15
【源程序】
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> #define INF 999999999 #define N 1001 using namespace std; int a[N][N],b[N][N]; int main() {int n;int x,y;int num,sum;cin>>n;for(int i=1;i<=n*n;i++){cin>>num;x=(i-1)/n+1;y=i%n;if(y==0)y=n;a[x][y]=num;}for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)b[i][j]=b[i-1][j]+a[i][j];int max=b[1][1];for(int i=1;i<=n;i++)for(int j=i;j<=n;j++){sum=0;for(int k=1;k<=n;k++){if(sum>0)sum+=b[j][k]-b[i-1][k];elsesum=b[j][k]-b[i-1][k];if(sum>max)max=sum;}}cout<<max<<endl;return 0; }?
總結
以上是生活随笔為你收集整理的最大子矩阵(信息学奥赛一本通-T1224)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 炮兵阵地(POJ-1185)
- 下一篇: 理论基础 —— 查找 —— 斐波那契查找