題目鏈結
題目大意:這裡有乙個n*m的矩陣,請你選出其中k個子矩陣,使得這個k個子矩陣分值之和最大。注意:選出的k個子矩陣
不能相互重疊。
題解:開始沒看見m<=2……
因為m只能取1/2,明顯分類討論
m=1 f[
i][j
]表示前
i個選擇
了j段的
最大和,
不選的話
f[i]
[j]=
f[i−
1][j
] 選p
+1……
i的話f
[i][
j]=m
ax(f
[p][
j−1]
+s[i
]−s[
p])
m=2 f[
i][j
][k]
表示第一
行前i個
,第二行
前j個選
出k個子
矩陣的最
大和 單
行轉移類
似,注意
多了一種
一次選兩
行的情況
若i=j,f[
i][j
][k]
=max
(f[p
][p]
[k−1
]+s1
[i]−
s1[p
]+s2
[j]−
s2[p
])
我的收穫:情況少->分類討論
#include
#include
#include
using
namespace
std;
#define m 105
int n,m,k;
int a[m][m],s[m],g[m][m];
int s1[m],s2[m],f[m][m][m];
void solve1()
printf("%d\n",g[n][k]);
}void solve2()
printf("%d\n",f[n][n][k]);
}void init()
int main()
1084 SCOI2005 最大子矩陣
time limit 10 sec memory limit 162 mb submit 2333 solved 1148 submit status discuss description 這裡有乙個n m的矩陣,請你選出其中k個子矩陣,使得這個k個子矩陣分值之和最大。注意 選出的k個子矩陣 不能...
bzoj1084 SCOI2005 最大子矩陣
description 這裡有乙個n m的矩陣,請你選出其中k個子矩陣,使得這個k個子矩陣分值之和最大。注意 選出的k個子矩陣 不能相互重疊。input 第一行為n,m,k 1 n 100,1 m 2,1 k 10 接下來n行描述矩陣每行中的每個元素的分值 每個元素的 分值的絕對值不超過32767 ...
BZOJ1084 SCOI2005 最大子矩陣
portal 注意到m只能為1或2 分類討論。m 1的時候其實就是最大k段連續子段和。f i j ma x f i j ma x f k j f k j 1 sum i s um k m 2時 g i j k 表示第一列到i,第二列到j,選了k個子矩陣的最大和 那麼有一下幾種情況 都不選 g i j...