P1436 棋盤分割

2022-06-02 05:42:11 字數 937 閱讀 7146

題意:給出乙個8*8的棋盤,讓我們將其分割成n塊,每一塊的值為(塊中所有數的和)^2

求出在最優的分割方式下的最小值;

思路:這是乙個分割問題,但直接考慮分割有點難,所以我們逆向考慮,將其想為填補問題,也就是說,將n塊矩陣填補成乙個8*8的矩陣的最小答案;

那麼我們需要以下幾步:

1.初始化,我們先求出二維字首和,方便下文求出每一塊的平方和

2.設定乙個dp陣列 (五維) 第一維為塊數,剩下四維表示矩陣的左上端點座標和右下端點座標。

3.進行計算,我們將塊數從小到大進行列舉,將考慮的矩陣也從小到大列舉,然後即可,

對於乙個矩陣的分割操作,我們可以有兩種,假設目前矩陣為(x1,y1)到(x2,y2);

第一種: 將矩陣進行列方面的切割,這裡又可以分為兩種,假設我們切在k列  

1.將k+1以及後面的作為被切的矩陣

2.將k+1前面的作為被切的矩陣

第二種:同上,進行行方面的切割

**如下:

1 #include2 #include3 #include4

#define ll long long

5#define inf 0x3f3f3f3f

6using

namespace

std;

7int m,a[20][20],sum[20][20

];8 ll f[20][10][10][10][10];9

const

int n=8

;10 inline ll calc(int x1,int y1,int x2,int

y2)14

15int

main()

45 printf("

%lld\n

",f[m][1][1

][n][n]);

46return0;

47 }

P1436 棋盤分割

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

洛谷 P1436 棋盤分割

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

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

這道題目和 演算法藝術與資訊學競賽 的題目描述稍微有點區別 這裡是求平方和的最小值,書上是方差的最小值 不過解法都是一樣的,就是區間dp,我這裡使用記憶化搜尋實現。f r1 c1 r2 c2 m 表示以 r1,c1 為左上角的格仔,以 r2,c2 為右下角的格仔,並且分成 m 份的最小平方和。實現 ...