SCOI2005 最大子矩陣

2022-02-27 23:42:57 字數 1072 閱讀 7462

這裡有乙個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

#include#include#include#include#define ll long long int

#define max(a,b) ((a) > (b) ? (a) : (b))

#define rep(i,n) for (int i = 1; i <= (n); i++)

#define fo(i,x,y) for (int i = (x); i <= (y); i++)

#define redge(u) for (int k = head[u]; k != -1; k = edge[k].next)

using namespace std;

const int maxn = 105,maxm = 15,inf = 1000000000;

inline int read()

while (c >= 48 && c <= 57)

return out * flag;

}int a[maxn][3],n,m,k,f[maxn][maxm][5];

int main()

int ans = max(max(max(f[n][k][0],f[n][k][1]),max(f[n][k][2],f[n][k][3])),f[n][k][4]);

printf("%d\n",ans);

return 0;

}

SCOI2005 最大子矩陣

dp!dp!dp!乙個dp蒟蒻的部落格裡寫滿了dp題,真不知道我之前是怎麼想的 任意門description 這裡有乙個n m的矩陣,請你選出其中k個子矩陣,使得這個k個子矩陣分值之和最大。注意 選出的k個子矩陣不能相互重疊。input 第一行為n,m,k 1 n 100,1 m 2,1 k 10 ...

SCOI2005 最大子矩陣

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

SCOI2005 最大子矩陣

m 1的時候很簡單 不說了。m 2的時候的動態規劃需要討論,有點麻煩。我們設dp i j k 為處理到第i行,已經使用了j個矩陣,這一行採取k的取用方式。其中0表示什麼都不拿。1表示只要左邊的。2表示只要右邊的。3表示兩邊都要,且分開加入矩陣。4表示兩邊都要,放在乙個矩陣中。然後轉移方程可以參見 如...