Title Description

The following definitions are given:

Sub-matrices: A new matrix that selects the intersection of some rows and some columns from a matrix (preserving the relative order of rows and columns) is called a sub-matrix of the original matrix.

For example, the left-hand image below selects the intersection of the 2nd, 4, and 2nd, 4, and 5 columns to get a 2*3 sub-matrix as shown in the image on the right.

9 3 3) 3 9

9 4 8) 7 4

1 7 4) 6 6

6 8 5) 6 9

7 4 5) 6 1

One of the 2*3 's sub-matrices is

4 7 4

8 6 9

Adjacent elements: an element in the matrix is adjacent to the left and right four elements of it, if one exists.
the value of the matrix: the sum of the absolute values of the difference between each pair of adjacent elements in the matrix.

Task: Given a positive integer matrix of n rows M column, you select a sub-matrix of the R row C column from this matrix, making the sub-matrix the smallest score and outputting this score.

(This topic is 2014NOIP popularization T4)

Input/output format

Input format:

The first line contains four integers separated by spaces n,m,r,c, meaning as described in the problem description, separated by a space between every two integers.

The next n rows, each containing an integer of M separated by spaces, are used to represent the matrix of the N-row m-column in the problem description.

Output format:

Output a total of 1 rows, containing 1 integers, representing the minimum score of the sub-matrix satisfying the topic description.

Input/Output sample

Input Sample # #:

5 5 2 3

9 3 3) 3 9

9 4 8) 7 4

1 7 4) 6 6

6 8 5) 6 9

7 4 5) 6 1

Sample # # of output:

6

Input Sample #:

7 7 3 3

7 7 7 6 2 10 5

5 8 8 2 1 6 2

2 9 5 5 6 1 7

7 9 3 6 1 7 8

1 9 1 4 7 8 8

10 5 9 1 1 8 10

1 3 1 5 4 8 6

Output Example #:

16

Description

"Input and Output Example 1 description"

The sub-matrices of the 2 rows and 3 columns with the smallest points in the matrix consist of the elements of the 4th row of the original matrix, the 5th row and the 1th column, the 3rd column, and the 4th column.

6 5 6

7 5 6

, its score is

|6−5| + |5−6| + |7−5| + |5−6| + |6−7| + |5−5| + |6−6| = 6.

"Input and Output Example 2 description"

The sub-matrices of the 3 rows and 3 columns with the smallest points in the matrix consist of the elements of the 4th, 5th, 6th and 2nd, 6th, and 7th columns of the original matrix, and the smallest sub-matrices of the selected scores are

9 7 8 9 8 8 5 8 10

"Data description"

For 50% of the data, 1≤n≤12,1≤m≤12, each element in the matrix is 1≤a[i][j]≤20;

For 100% of the data, 1≤n≤16,1≤m≤16, each element in the matrix is 1≤a[i][j]≤1,000,

1≤r≤n,1≤c≤m.

Analysis

Row with DFS enumeration, column with linear DP O (N^3)

Code

[Popularity] NOIP 2014 sub-matrix #include <cmath> #include <cstdio> #include <cstring> #include <iostream> # Include<algorithm> #define LL Long #define M (a) memset (a,0,sizeof a) #define FO (i,j,k) for (i=j;i<=k;i++) US
ing namespace std;
int n,m,r,c,ans=1e9; int dp[20][20];
I was selected, the last column is J's score int map[20][20],num[20],w[20][20];
inline void dynamic () {int i,j,k;
M (w);
memset (dp,0x3f,sizeof DP);
Fo (j,1,m) {dp[1][j]=0;
Fo (i,2,r) dp[1][j]+=abs (Map[num[i]][j]-map[num[i-1]][j]);
} fo (j,1,m) fo (k,j+1,m) fo (i,1,r) w[j][k]+=abs (Map[num[i]][j]-map[num[i]][k]);
Fo (i,2,c) fo (j,i,m) fo (k,i-1,j-1) dp[i][j]=min (Dp[i][j],dp[i-1][k]+w[k][j]+dp[1][j]);
Fo (i,c,m) ans=min (Ans,dp[c][i]);
} inline void Dfs (int dep) {if (dep>r) {dynamic ();
Return
} for (int i=num[dep-1]+1;i<=n-(R-DEP); i++) Num[dep]=i,dfs (dep+1);
} int main () {int i,j;
scanf ("%d%d%d%d", &n,&m,&r,&c);
Fo (i,1,n) fo (j,1,m) scanf ("%d", &map[i][j]);
DFS (1);
printf ("%d\n", ans);
return 0; }