洛谷 P1436 棋盤分割

2021-08-15 19:42:09 字數 1025 閱讀 3008

如圖:

思路:這是乙個很明顯的二維dp題,每一次分割的可以衍生出2種情況:左(上)右(下)2個新矩形

所以最優解一定存在於兩種新情況中,繼續進行遞迴求解即可;

dp[左上座標x][左上座標y][右下座標x][右下座標y][分割次數];

順推:dp[i][j][k][l][num] -> 新的上(左)(下)(右)矩形dp+   切割零次時剩餘部分 sum^2;

逆推:dp[i][j][k][l][num]

方程:  

dp[i][j][k][l][num]=min(橫著列舉切割方法,豎著列舉切割方法);//原方程太長,在程式裡;

但是這道題的方程並不是最最重要的問題,推出了方程一樣t的不要不要的

我們在列舉切割方法的時候,需要求出切割出的矩形的 值的平方,但每次都暴力/自定義函式 算一遍的話太浪費了

於是很流暢的就使得我們想到預處理的辦法,利用簡單的容斥原理,就可以在dp[i][j][k][l][0]上記錄一遍不分割

的時候的平方和。

本蒟蒻是通過求了兩遍 字首和得到的差不多為 o(n^2+n^4)(n=8)算的,因為n不大,所以不是很介意;

總複雜度約為 o(8^5*n次詢問+列舉均攤+8^2+8^4) ->o(乙個大常數)

#includeusing namespace std;

int n,x;

int sum[9][9];

int d,b[9][9];

int dp[9][9][9][9][16];

int main(void)}

for(int i=1;i<=8;i++)}

for(int i=1;i<=8;i++)}}}

for(int num=1;num

P1436 棋盤分割

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

P1436 棋盤分割

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

洛谷 1436 棋盤分割

一道經典的dp題目,應該並沒有提高 拉莫難。思路 搞懂題意後 這點也很重要 我們首先考慮棋盤的分割情況,不難發現 然後我們考慮狀態的設計和轉移 ac 吧 include include include include using namespace std intread intn,b,x int ...