P2331 SCOI2005 最大子矩陣

2022-08-20 12:45:11 字數 874 閱讀 3578

傳送門

首先感謝ccsc友(xi)好(zhi)的講解

康康m的範圍

m只能取1或者2

先看m=1 

是一條鏈

那麼對於第i個點有三種情況

1 和上面連在一起成乙個矩陣

2 和下面連在一起成乙個矩陣

3 成為斷點

同樣的 對於m=2我們也這樣分析

設f[i][j][k]代表第i行取了j個矩陣屬於第k種情況

但是要注意應該以一行為乙個基準

那麼就有5種情況

0 不取這一行

1 取左邊的點

2 取右邊的點

3 兩個點都取 並且屬於乙個矩陣

4 兩個點都取 但是屬於兩個矩陣

按這個思路推轉移方程

具體看**

//

p2331 [scoi2005]最大子矩陣

#includeusing

namespace

std;

intn,m,k;

int f[105][15][5

];int a[105][3

];int

main()

}intt;

if(m==1

) }

printf("%d

",max(f[n][k][0],f[n][k][1

]));

return0;

}for(int i=1;i<=n;i++)

}for(int i=1;i<=n;i++)

}int ans=0

;

for(int i=0;i<=4;i++)

cout

}

P2331 SCOI2005 最大子矩陣

這裡有乙個n m的矩陣,請你選出其中k個子矩陣,使得這個k個子矩陣分值之和最大。注意 選出的k個子矩陣不能相互重疊。其中 1 le n le 100,1 le m le 2,1 le k le 10.m 只有 1 和 2 兩種取值,所以直接討論就好 m 1 時 是前 k 個最大連續欄位和 定義 f ...

洛谷 P2331 SCOI2005 最大子矩陣

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

洛谷P2331 SCOI2005 最大子矩陣

題目 dp此題可以分為兩個子問題。m 等於 1 原題目轉化為求一行數列裡的 k 塊區間的和,區間可以為空的值。直接定義狀態 dp i t 表示前i個數分為t塊的最大值。因為區間可以為空,所以最大值再小也不會比0小,所以初始化 dp 值為 0 有方程 dp i t max dp i 1 t dp j ...