求乙個二維陣列中 子陣列和的最大值

2022-05-04 23:24:07 字數 1211 閱讀 1028

信1101-2

胡弦琴20113026

王兵茹20112917

這周一的時候老師給的課上練習是在上一次的基礎上,將一位陣列改成二維陣列,求二維陣列中子陣列和的最大值。由於課上時間不多了,只是大概想了乙個思路,我們剛開始想的是窮舉法實現,具體的分析也就是下面我們紙上畫的這些。

從一開始將所有的可能都遍歷一遍,然後求出最大值。這種演算法的時間複雜度o(n*n*m*m),這種想法雖然可以實現,但是是一種非常浪費時間的演算法.它在實現的時候需要巢狀四層的for迴圈,所以比較麻煩。在這種理解的基礎上,我們要想到了下面的解決方案。

具體的轉換如下:

這種方法的特殊邊界要考慮,首先求出p[i][j],表示以(0,0)為起點,以(i,j)為終點的的連續子陣列的和,起點是第a行,終點是第c行,然後轉換為一維連續子陣列的和;首先應該找出p[i][j],

//

計算p[i][j]

for(i=0;i)

else}}

然後就開始找所有子陣列中和的最大值了,初始化為max[0][0];

#include using

namespace

std;

int maxsubarray(int **a,int n,int

m)

else}}

//計算二維陣列最大子陣列的和

inttemp;

int max=a[0][0

];

intans;

//如果m==1

if(m==1

)

else

if(ans

ans=temp;}}

}else

else

for(int k=m-2;k>=0;k--)

else

if(ans

ans=temp;}}

}}return

ans;

}int

main()

}int ans=maxsubarray(a,n,m);

printf(

"二維陣列的最大子陣列之和是:%d\n

",ans);

return0;

}

執行結果如下:

求乙個二維陣列的最大子矩陣

演算法描述 本題可以使用窮舉法,但是那樣不容易實現以及效率不高,我們的想法是,將二維陣列變成一維陣列,再將此 一維陣列 按照上次的做法既可求出最大子陣列,怎麼樣將二維變成一維呢 例如我們做的是四行四列的陣列,將每一行用乙個sum來表示,則有sum 1 sum 2 sum 3 sum 4 sum 1 ...

二維陣列求最大子陣列

程式要使用的陣列放在乙個叫 input.txt 的檔案中,檔案格式是 陣列的行數,陣列的列數,每一行的元素,用逗號分開 每乙個數字都是有符號32位整數,當然,行數和列數都是正整數。演算法思想 對於一維的陣列,我們可以很容易用動態規劃的方法求得最大子陣列 所以我們將i 0.n j i.n 列舉所有行的...

求二維陣列中最大子陣列的和

題目 給出乙個 m n 的二維矩陣 元素可為正可為負 求該二維矩陣的乙個子矩陣,且此子矩陣中所有元素的和最大,並輸出該矩陣的和。分析 因為輸出的是矩陣,把每列資料中第i行到第j行進行相加,這樣得到乙個列矩陣,a 1.n 這樣就轉化成乙個一維整數陣列中最大子陣列的和,通過求得迴圈不同第i行到第j行之間...