BZOJ1084 最大子矩陣(動態規劃)

2022-03-20 09:04:40 字數 1029 閱讀 3912

這裡有乙個n*m的矩陣,請你選出其中k個子矩陣,使得這個k個子矩陣分值之和最大。注意:選出的k個子矩陣不能相互重疊。

輸入輸出格式

輸入格式:

第一行為n,m,k(1≤n≤100,1≤m≤2,1≤k≤10),接下來n行描述矩陣每行中的每個元素的分值(每個元素的分值的絕對值不超過32767)。

只有一行為k個子矩陣分值之和最大為多少。

輸入樣例#1

3 2 2

1 -3

2 3-2 3

輸出樣例#1

9還是我太菜

想了半天,發現連資料範圍都沒有看

\(m≤2\)

。。。是我太菜,什麼都看不見

既然\(m≤2\),那麼分情況直接搞就行了

很顯然吧。。

設\(f[i][j]\)表示當前搞到第\(i\)行,已經選了\(j\)個子矩陣的最大值

暴力列舉一下上乙個開始的位置

然後字首和轉移即可

設\(f[i][j][k]\)表示當前第一列的搞到\(i\),第二列的搞到\(j\),一共選了\(k\)個子矩陣的最大值

首先上下兩列分開搞,類似\(m=1\)的轉移,

然後當\(i=j\)時,顯然可以兩列一起轉移

所以也類似於\(m=1\)的轉移,

求和的時候搞兩列的就行了

#include#include#include#include#include#include#include#include#include#includeusing namespace std;

inline int read()

int n,m,g[200][5];

int k,f[101][101][15],s[5][200];

int ff[101][15];

int main()

} printf("%d\n",ff[n][k]);

} else

}printf("%d\n",f[n][n][k]);

} return 0;

}

bzoj 1084 最大子矩陣

written with stackedit.這裡有乙個 n m 的矩陣,請你選出其中 k 個子矩陣,使得這個 k 個子矩陣分值之和最大.注意 選出的 k 個子矩陣不能相互重疊。ps 這裡的題意有些不明確.可以選空矩陣 最多選 k 個 不能重疊指的是不能有相交部分.第一行為 n,m,k 1 n 10...

bzoj1084 最大子矩陣

這裡有乙個n m的矩陣,請你選出其中k個子矩陣,使得這個k個子矩陣分值之和最大。注意 選出的k個子矩陣 不能相互重疊。第一行為n,m,k 1 n 100,1 m 2,1 k 10 接下來n行描述矩陣每行中的每個元素的分值 每個元素的 分值的絕對值不超過32767 只有一行為k個子矩陣分值之和最大為多...

BZOJ 1084 最大子矩陣 線性dp

給出乙個n m n mn m的矩陣,其中n 100,m 2 n leq100,m leq2 n 100,m 2,然後求選取k kk個子矩陣的最大值是多少。注意到這個m mm只有1 11和2 22兩種情形。當m 1 m 1m 1的時候,這個問題退化為乙個長度為n nn的序列選k kk段的最大值。fi,...