1.題目
輸入乙個二維整形陣列,陣列裡有正數也有負數。
二維陣列首尾相接,象個一條首尾相接帶子一樣。
陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和。
求所有子陣列的和的最大值。
2.設計思路
參照環狀一維陣列,將二維陣列進行擴充套件。只將陣列的列數擴大為原來的2*n-1,行數不變。
3.源**
#include #include4.結果截圖using
namespace
std;
#define max(a,b) ((a)>(b)?(a):(b))
#define maxn 100
inta[maxn][maxn];
intpartsum[maxn][maxn];
//計算子矩陣的和
int matrixsum(int s, int t, int i, int
j)int
main()
for (j = col+1; j <= 2 * col - 1; j++)
//cout << a[i][j] << " ";
} cout
<
}for (i = 0; i <= row; i++)
partsum[i][
0] = 0
;
for (j = 0; j <=2* col-1; j++)
partsum[
0][j] = 0
;
//計算矩陣的部分和
for (i = 1; i <= row; i++)
for (j = 1; j <=2* col-1; j++)
partsum[i][j] = a[i][j] + partsum[i - 1][j] + partsum[i][j - 1] - partsum[i - 1][j - 1
];
intn1, n2;
int maxsofar = a[1][1
];
for (n1 = 1; n1 <= row; n1++)
for (n2 = n1; n2 <= row; n2++)
}cout
<
}
5.總結
相似的程式可以借鑑,二維陣列可以轉化為一維陣列。對於每個程式,都要找到相似點,這樣就會變得簡單。
環狀二維陣列最大子陣列求和
題目 返回乙個二維整數陣列中最大子陣列的和。要求 輸入乙個二維整形陣列,陣列裡有正數也有負數。二維陣列首尾相接,象個一條首尾相接帶子一樣。n陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和。求所有子陣列的和的最大值。要求時間複雜度為o n 結對程式設計要求 兩人結對完成程式設計任務。一...
環狀二維陣列(改進版)
改進版的程式中對此進行了判斷。此問題分為兩種,一種是最大子數組成環,一種是最大子陣列未成環。未成環的部分之前已實現,下面是成環部分。開始的思路是 將矩陣進行擴大,類似於一維陣列,但是擴大後就會出現子矩陣的範圍有可能超出矩陣的範圍。所以在此處要有乙個判斷。改進後的程式 include include ...
二維陣列 二維陣列和指標
include using namespace std int main 如上面這段程式所示,通過取位址符 指標 p 獲得了變數 a 的位址,那麼解引用符 就可以從 p 中得到變數 a 的值。也就是說,p a和 p a是等價的。p 是變數 a 的位址,從 p 中就可以取出 a 的值。反之,能從 p ...