bzoj1084 DP 字首和 最大子矩陣

2021-07-22 05:14:08 字數 1196 閱讀 6993

description

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

input

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

output

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

sample input

3 2 2

1 -3

2 3-2 3

sample output

題解

首先使用字首和,s[i][1]表示(第一列)1~i的字首和,s[i][2]表示(第二列)1~i的字首和。然後dp就行了~具體見**,寫了點注釋的……

**

#include

#include

#include

#include

#include

using

namespace

std;

int f[110][110][11],s[110][10];

/*s表示的是字首和,也就是(1,1)~(i,j)分成乙個矩陣的值

f[i][j][k]表示 第一列的(1 to i)行,以及第二列的(1 to j)行,分成k個矩陣

如m==1 則不需要使用j,直接用f[i][0][k]進行迭代

*/int main()

memset(f,0,sizeof(f));

if(m==1)//分兩種情況處理

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

}else

// 輸出

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

}return

0;}

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

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個子矩陣分值之和最大為多...