最大和 最大子矩陣模板題

2021-12-30 01:47:05 字數 1422 閱讀 4178

給定乙個由整數組成二維矩陣(r*c),現在需要找出它的乙個子矩陣,使得這個子矩陣內的所有元素之和最大,並把這個子矩陣稱為最大子矩陣。?

例子:0 -2 -7 0?

9 2 -6 2?

-4 1 -4 1?

-1 8 0 -2?

其最大子矩陣為:

9 2?

-4 1?

-1 8?

其元素總和為15。?

/*這個就是二維的最大連續和問題。

我們可以通過轉化為一維的最大連續和來求解,方法就是用將n行的矩陣壓縮為一行(累加求和),這樣就轉化為了一維的

最大連續和問題。然後我們對從第i行開始的子矩陣進行列舉即可。複雜度為o(n*n)。?

假設最大子矩陣的結果為從第r行到k行、從第i列到j列的子矩陣,如下所示(ari表示a[r][i],假設陣列下標從1開始):

? | a11 …… a1i ……a1j ……a1n |

? | a21 …… a2i ……a2j ……a2n |

? | ?. ? ? . ? ? . ? ?. ? ?. ? ? . ? ?. ? |

? | ?. ? ? . ? ? . ? ?. ? ?. ? ? . ? ?. ? |

? | ar1 …… ari ……arj ……arn |

? | ?. ? ? . ? ? . ? ?. ? ?. ? ? . ? ?. ? |

? | ?. ? ? . ? ? . ? ?. ? ?. ? ? . ? ?. ? |

? | ak1 …… aki ……akj ……akn |

? | ?. ? ? . ? ? . ? ?. ? ?. ? ? . ? ?. ? |

? | an1 …… ani ……anj ……ann |

?那麼我們將從第r行到第k行的每一行中相同列的加起來,可以得到乙個一維陣列如下:

?(ar1+……+ak1, ar2+……+ak2, ……,arn+……+akn)

?由此我們可以看出最後所求的就是此一維陣列的最大子段和問題,到此我們已經將問題轉化為可以解決的問題了。*/?

#include

#include

#include

int map[105][105];

int n,m,max;

void fun(int k)?}

int main()

fun(i);

}} printf("%d\n",max);

} return 0;}輸入

第一行輸入乙個整數n(0每組測試資料:

第一行有兩個的整數r,c(0隨後有r行,每行有c個整數;

輸出輸出矩陣的最大子矩陣的元素之和。

樣例輸入

14 40 -2 -7 0

9 2 -6 2

-4 1 -4 1

-1 8 0 -2

樣例輸出

15

最大子矩陣模板

最大子矩陣問題 問題描述 具體見 給定乙個n n 0讓我們先來看另外的乙個問題 最大子段和問題 給定乙個長度為n的一維陣列a,請找出此陣列的乙個子陣列,使得此子陣列的和sum a i a i 1 a j 最大,其中i 0,i i,jsum maxsofar sum 第二種方法 帶記憶的遞推法 cum...

NYOJ104 最大和(dp 求最大子矩陣)

時間限制 1000 ms 記憶體限制 65535 kb 難度 5 描述 給定乙個由整數組成二維矩陣 r c 現在需要找出它的乙個子矩陣,使得這個子矩陣內的所有元素之和最大,並把這個子矩陣稱為最大子矩陣。例子 0 2 7 0 9 2 6 2 4 1 4 1 1 8 0 2 其最大子矩陣為 9 2 4 ...

最大子矩陣

描述 已知矩陣的大小定義為矩陣中所有元素的和。給定乙個矩陣,你的任務是找到最大的非空 大小至少是1 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的矩陣。輸入的第...