題目鏈結
一開始沒仔細看題tat,後來發現「1≤m≤2」。。。
這提示我萌什麼?
我把解法分為m=1和m=2兩種情況
首先,sum[i,j]為第j列的字首和,即表示第j列前i行各個數字的和
①當m=1 時:
用f[i,j]表示前i個數,取了j個矩陣的最優值
目標狀態:f[n,k]
狀態轉移:f[i,j]=max(f[i-1,j],f[k,j-1]+sum[i,1]-sum[k,1])(0<=k<=i-1)
②當m=2 時:
用w[i,j,k]表示第一列取到第i個數,第二列取到第j個數,取了k個矩陣的最優值
目標狀態:f[n,n,k]
狀態轉移:f[i,j,k]=max(w[i-1,j,k],w[i,j-1,k]//不取
w[ii,j,k-1]+sum[i,1]-sum[ii,1] ,
w[i,jj,k-1]+sum[j,2]-sum[jj,2]//分別在兩列取
(當i=j時)w[ii,ii,k-1]+sum[i,1]+sum[i,2]-sum[ii,1]-sum[ii,2]//在兩列都取)
【code】:
vari,j,k,n,m,t,ii,jj:integer;
tot,cnt,ans:longint;
sum:array[0..110,0..2]of longint;
f:array[0..110,0..12]of longint;
w:array[0..110,0..110,0..12] of
longint;
function max(i,j:longint):longint;
begin
if i>j then exit(i);exit(j);
end;
begin
readln(n,m,k);
fillchar(sum,sizeof(sum),0);
for i:=1 to n do begin
for j:=1 to m do
begin
read(t);
sum[i,j]:=sum[i-1,j]+t;
end;
readln;
end;
if m=1 then begin
fillchar(f,sizeof(f),0);
for i:=0 to n+1 do
f[i,0]:=0;
for i:=1 to n do
forcnt:=1 to k do begin
f[i,cnt]:=f[i-1,cnt];
for j:=0 to i-1 do
f[i,cnt]:=max(f[i,cnt],f[j,cnt-1]+sum[i,1]-sum[j,1]);
end;
writeln(f[n,k]);
endelse begin
fillchar(w,sizeof(w),0);
for i:=1 to n do
forj:=1 to n do begin
w[i,j,0]:=0;
for cnt:=1 to k do begin
w[i,j,cnt]:=max(w[i-1,j,cnt],w[i,j-1,cnt]);
for ii:=0 to i-1 do
w[i,j,cnt]:=max(w[i,j,cnt],w[ii,j,cnt-1]+sum[i,1]-sum[ii,1]);
for jj:=0 to j-1 do
w[i,j,cnt]:=max(w[i,j,cnt],w[i,jj,cnt-1]+sum[j,2]-sum[jj,2]);
if i=j then
for ii:=0
to i-1 do
w[i,j,cnt]:=max(w[i,j,cnt],w[ii,ii,cnt-1]+sum[i,1]+sum[i,2]-sum[ii,1]-sum[ii,2]);
endend;
writeln(w[n,n,k])
endend.
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...
BZOJ1084 SCOI2005 最大子矩陣
這題顯然是dp。定義f i j k 表示前i行j列裡有k個矩陣的最大元素總和。因為m 2,所以可以分兩種情況分別寫乙個dp,套一套容斥就行了。如下 include include include using namespace std const int maxn 105,maxk 15 int n...