洛谷P1436 棋盤分割 題解 二維區間DP

2022-05-20 18:23:36 字數 793 閱讀 9859

這道題目和《演算法藝術與資訊學競賽》的題目描述稍微有點區別(這裡是求平方和的最小值,書上是方差的最小值),不過解法都是一樣的,就是區間dp,我這裡使用記憶化搜尋實現。

\(f[r1][c1][r2][c2][m]\) 表示以 \((r1,c1)\) 為左上角的格仔,以 \((r2,c2)\) 為右下角的格仔,並且分成 \(m\) 份的最小平方和。

實現**如下:

#include using namespace std;

const int maxn = 10;

int n, a[maxn][maxn], low[maxn][maxn], sum[maxn][maxn];

int get_sum(int r1, int c1, int r2, int c2)

int f[maxn][maxn][maxn][maxn][15];

bool vis[maxn][maxn][maxn][maxn][15];

int solve(int r1, int c1, int r2, int c2, int m) }}

for (int i = r1; i < r2; i ++) }}

}if (c1 < c2) }}

for (int i = c1; i < c2; i ++) }}

}return f[r1][c1][r2][c2][m] = ans;

}int main()

}printf("%d\n", solve(1, 1, 8, 8, n));

return 0;

}

洛谷 P1436 棋盤分割

如圖 思路 這是乙個很明顯的二維dp題,每一次分割的可以衍生出2種情況 左 上 右 下 2個新矩形 所以最優解一定存在於兩種新情況中,繼續進行遞迴求解即可 dp 左上座標x 左上座標y 右下座標x 右下座標y 分割次數 順推 dp i j k l num 新的上 左 下 右 矩形dp 切割零次時剩餘...

P1436 棋盤分割

題意 給出乙個8 8的棋盤,讓我們將其分割成n塊,每一塊的值為 塊中所有數的和 2 求出在最優的分割方式下的最小值 思路 這是乙個分割問題,但直接考慮分割有點難,所以我們逆向考慮,將其想為填補問題,也就是說,將n塊矩陣填補成乙個8 8的矩陣的最小答案 那麼我們需要以下幾步 1.初始化,我們先求出二維...

P1436 棋盤分割

無 將乙個 的棋盤進行如下分割 將原棋盤割下一塊矩形棋盤並使剩下部分也是矩形,再將剩下的兩部分中的任意一塊繼續如此分割,這樣割了 n 1 次後,連同最後剩下的矩形棋盤共有n塊矩形棋盤。每次切割都只能沿著棋盤格仔的邊進行 原棋盤上每一格有乙個分值,一塊矩形棋盤的總分為其所含各格分值之和。現在需要把棋盤...