程式要使用的陣列放在乙個叫 input.txt 的檔案中, 檔案格式是:
陣列的行數,
陣列的列數,
每一行的元素, (用逗號分開)
每乙個數字都是有符號32位整數, 當然, 行數和列數都是正整數。
演算法思想:對於一維的陣列,我們可以很容易用動態規劃的方法求得最大子陣列;
所以我們將i=[0...n], j[i..n]列舉所有行的可能,然後再對每一種可能(此時可以將它看做是一維陣列的情況),用dp求得其最大子陣列。
演算法時間複雜度o(n^3)。
#include#include#include#include#includeusing namespace std;//by frank
const int n = 103;
const int inf = -9999;
int maxsubarray(int a, int n)
return max;}
int findmaxsubmatrix(int a[n], int n)
}return max;}
int main()
{ int a[n][n];
int n = 0;
while(cin>>n && n)
{for(int i=0; i>a[i][j];
cout<四,執行結果截圖
五,實驗總結
我的隊友:程鵬遠
遇到問題:
要求到所有子陣列的和,遍歷方法的選取就很重要,最開始的思路是遍歷所有的子陣列,但是在進行演算法的實現時發現演算法過於麻煩,程式實現太難,最後兩人多次討論和在網上資料的參考,從提出的3種遍歷方法中找到了能實現的那一種。
收穫如果寫出乙個好的演算法去解決複雜的問題,那麼嚴謹的邏輯思維是非常重要的。如果個人的邏輯思維很強的時候,那麼設計演算法並將其實現的時候就會比較容易,如果邏輯思維不夠強不夠嚴謹那麼實現起來就會使**變得複雜,所以在編寫程式的時候,邏輯思維優先想出比較好的演算法才是解決一切問題的關鍵
體會在乙個人動腦用邏輯思維想問題的時候,有乙個人在旁邊輔助,及時的提醒,矯正,會使你的思維更加的嚴謹,會有事半功倍的效果,他能夠提醒你**有問題,能夠讓你保持清醒!
二維陣列最大子陣列和
陣列輸出 int sum a 0 0 b,c n int imin 0,imax 0,jmin 0,jmax 0 for i 0 i c i a 0 i for i 1 i 4 i else b c j if sum b if i1 else for i imin i imax i cout cou...
求二維陣列中最大子陣列的和
題目 給出乙個 m n 的二維矩陣 元素可為正可為負 求該二維矩陣的乙個子矩陣,且此子矩陣中所有元素的和最大,並輸出該矩陣的和。分析 因為輸出的是矩陣,把每列資料中第i行到第j行進行相加,這樣得到乙個列矩陣,a 1.n 這樣就轉化成乙個一維整數陣列中最大子陣列的和,通過求得迴圈不同第i行到第j行之間...
求二維陣列的最大子集和
小組成員 李夏蕾 楊世超 這次的題目是接著上次的一維陣列進行的進一步的引申,雖然考慮了很多的方法,但還是覺得窮舉法是最保險的一種,下面是我們的思路 我們採用的是自己輸入行數和列數,然後輸入資料進行測試。同時申請了兩個陣列用來存放子集的長度和寬度,好用來輸出。主要的就是for迴圈了,首先是最外層的,先...