求一個二維整數數組中最大子數組的和
阿新 • • 發佈:2018-10-21
pre 完成 編程 mes 列數 矩陣 n) 一個 str
要求:
輸入一個二維整形數組,數組裏有正數也有負數。
二維數組中連續的一個子矩陣組成一個子數組,每個子數組都有一個和。
求所有子數組的和的最大值。要求時間復雜度為O(n)。
兩人結對完成編程任務。
一人主要負責程序分析,代碼編程。 一人負責代碼復審和代碼測試計劃。
#include <iostream> using namespace std; #define M 1000 int A[M][M]; int AS[M][M]; inline int ArraySum(int s,int t,int i,int j) { return AS[i][j]-AS[i][t-1]-AS[s-1][j]+AS[s-1][t-1]; } int max(int a,int b) { return(a>b?a:b); } int main() { int m,n,i,j; cout<<"輸入數組的行數:"; cin>>n; cout<<"輸入數組的列數:"; cin>>m; cout<<"輸入一個二維整數數組:"<<endl; for(i=0;i<n;i++) { for(j=0;j<m;j++) { cin>>A[i][j]; } } for(i=0;i<n;i++) { for(j=0;j<m;j++) { AS[i][j]=A[i][j]+AS[i-1][j]+AS[i][j-1]-AS[i-1][j-1]; } } int Max=A[0][0]; for(int a=0;a<n;a++) { for(int c=a;c<n;c++) { int IV=ArraySum(a,0,c,0); for(j=1;j<m;j++) { IV=max(ArraySum(a,j,c,j),ArraySum(a,j,c,j)+IV); Max=max(IV,Max); } } } cout<<"數組最大子數組之和為:"<<Max<<endl; system("pause"); }
求一個二維整數數組中最大子數組的和