洛谷P2331 SCOI2005 最大子矩陣

2022-04-30 07:24:11 字數 1092 閱讀 6754

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

輸入格式: 

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

輸出格式:

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

輸入樣例#1: 

3 2 2

1 -3

2 3-2 3

輸出樣例#1:

9

由於這道題的資料範圍,所以相對好做,動態轉移方程也很好理解。

f[i][j][t]表示第一列掃到了i位置,第二列掃到了j位置,一共取了t個矩陣。

最簡單的轉移:f[i][j][t]=max(f[i-1][j][t],f[i][j-1][t])

但是要考慮當前得到的子陣和中還包含了更優的選擇,所以分別掃第一列、第二列和矩陣。

所以預處理出每一列的字首和(推薦),這道題沒必要處理出矩陣和,而且我之前沒有特判m=1的情況被坑,只有80分。

1 #include2 #include3

using

namespace

std;

4int n,m,k,a[222][222];5

long

long s[222][222],f[222][222][22],d[222][222];6

intmain()715

if(m==1)//

特判嗎m=1的情況

1625

}26 cout27return0;

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

30for(int j=1;j<=n;j++)

31for(int t=1;t<=k;t++)

3242

if(f[n][n][k]==136

) 43

47 cout48return0;

49 }

洛谷 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 ...

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