NYOJ 題目104最大和(動態規劃)

2021-06-24 18:09:52 字數 1474 閱讀 1223

時間限制:

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 8 

其元素總和為15。 

輸入

第一行輸入乙個整數n(0

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

樣例輸入

1

4 40 -2 -7 0

9 2 -6 2

-4 1 -4 1

-1 8 0 -2

樣例輸出

15

**[苗棟棟]原創

上傳者苗棟棟

思路:

假設最大子矩陣的結果為從第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)

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

nyoj 和 poj 題目基本一樣,只是輸入格式 有區別,這裡只給出 nyoj 的 **。。 

ac**

#include#includeint max,n,m;

int a[110][110];

void maxsum(int x)

}int main()

} max=a[1][1];

for(i=1;i<=n;i++)

maxsum(i);}}

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

}}

nyoj 104 最大和 區間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 ...

poj 1050 nyoj104 矩陣最大和

給定乙個由整數組成二維矩陣 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 0 輸出 輸出...

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 ...