int func1(vector<vector<int>> &mat,int K)
{
int m = mat.size();
int n = mat[0].size();
int dp[4][9][3][3][2][2];
for (int i = 0; i <= m; i++)dp[i][0][0][0][1][0] = 0;
for (int i = 1; i <= m; i++)
{
for (int j = 0; j < m*n; j++)
{
for (int l = 0; l < n; l++)
{
for (int r = l; r < n; r++)
{
int value = 0;
for (int k = l; k <= r; k++)value += mat[i-1][k];
//1
if (j == r - l + 1){
dp[i][j][l][r][1][0] = dp[i - 1][0][0][0][1][0] + value;
}
else if (j>r - l + 1){
for (int p = l; p <= r; p++)
{
for (int q = p; q <= r; q++){
dp[i][j][l][r][1][0] = max(dp[i][j][l][r][1][0],
dp[i - 1][j - r + l - 1][p][q][1][0] + value);
}
}
}
//2
if (j >= r - l + 1){
for (int p = l; p <= r; p++)
{
for (int q = r; q < n; q++){
for (int y = 0; y <= 1; y++){
dp[i][j][l][r][1][1] = max(dp[i][j][l][r][1][1],
dp[i - 1][j - r + l - 1][p][q][1][y] + value);
}
}
}
}
//3
if (j >= r - l + 1){
for (int p = 0; p <= l; p++)
{
for (int q = l; q <= r; q++){
for (int x = 0; x <= 1; x++){
dp[i][j][l][r][0][0] = max(dp[i][j][l][r][0][0],
dp[i - 1][j - r + l - 1][p][q][x][0] + value);
}
}
}
}
//4
if (j >= r - l + 1){
for (int p = 0; p <= l; p++)
{
for (int q = r; q < n; q++){
for (int x = 0; x <= 1; x++){
for (int y = 0; y <= 1; y++){
dp[i][j][l][r][0][1] = max(dp[i][j][l][r][0][1],
dp[i - 1][j - r + l - 1][p][q][x][y] + value);
}
}
}
}
}
}
}
}
}
int mx = 0;
for (int i = 1; i <= m; i++){
for (int l = 0; l < n; l++)
{
for (int r = l; r < n; r++)
{
for (int x = 0; x <= 1; x++){
for (int y = 0; y <= 1; y++){
mx = max(mx, dp[i][K][l][r][x][y]);
}
}
}
}
}
return mx;
}
int main()
{
vector<vector<int> > a = { { -1, 2, -2 }, { 3, 2, -1 }, { 4, 3, 3 } };
int res = func1(a,6);
cout << res << endl;
system("pause");
}
04-07
1385
08-29
7014