洛谷 1436 棋盤分割

2022-03-04 09:08:30 字數 1223 閱讀 3669

一道經典的dp題目,應該並沒有提高+拉莫難。。。。。。。。。。。。。。。。。。。。。

思路:

搞懂題意後(這點也很重要),我們首先考慮棋盤的分割情況,不難發現:

然後我們考慮狀態的設計和轉移:

ac**吧:

#include #include 

#include

#include

using

namespace

std;

intread()

intn, b, x;

int a[10][10

];int s[10][10

];int dp[10][10][10][10][17

];int calc(int x1, int y1, int x2, int

y2)int

main()

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

for (int j = 1; j <= 8; ++j)

for (int o = i; o <= 8; ++o)

for (int k = j; k <= 8; ++k)

dp[i][j][o][k][

0] =calc(i, j, o, k),

dp[i][j][o][k][

0] *= dp[i][j][o][k][0

];

for (int p = 1; p < n; ++p)

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

for (int j = 1; j <= 8; ++j)

for (int o = i; o <= 8; ++o)

for (int k = j; k <= 8; ++k)

printf("%d

", dp[1][1][8][8][n - 1

]);

}

洛谷 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塊矩形棋盤。每次切割都只能沿著棋盤格仔的邊進行 原棋盤上每一格有乙個分值,一塊矩形棋盤的總分為其所含各格分值之和。現在需要把棋盤...