BZOJ 1084 最大子矩陣 線性dp

2021-09-27 08:06:00 字數 1128 閱讀 4472

給出乙個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,

jf_

fi,j

​表示前i

ii個中選擇j

jj段的最大值。對於不選的情形:fi,

j=fi

−1,j

f_=f_

fi,j​=

fi−1

,j​,對於選的情形,列舉當前這一段的左端點。fi,

j=

max⁡

f_=\max\+sum_\}

fi,j​=

max推廣m=2

m=2m=

2的情形,相當於兩個長度為n

nn的序列選k

kk段的最大值。同理不選的情形:fi,

j,k=

max⁡

f_=\max\,f_\}}

fi,j,k

​=max,選擇的話就分別對兩個序列處理,同時加上兩個長度相等的情形。

#includeusing namespace std;

typedef long long ll;

const int inf=0x3f3f3f3f;

const int n=1e2+3;

int n,m,k;

namespace solve_one

} void solve()

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

namespace solve_two

} void solve()

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

int main()

else if(m==2)

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

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

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