題面:
設f[k][i][j][x][y]為切了k次從(i,j)到(x,y)矩形的最大解。
那麼dp方程就很好寫出來了。
f[k][i][j][x][y]=min(f[k][i][j][x][y],min(f[1][i][j][a][y]+f[k-1][a+1][j][x][y],f[k-1][i][j][a][y]+f[1][a+1][j][x][y]));
f[k][i][j][x][y]=min(f[k][i][j][x][y],min(f[1][i][j][x][a]+f[k-1][i][a+1][x][y],f[k-1][i][j][x][a]+f[1][i][a+1][x][y]));
雖然有一點點長,但是還是很好理解。
就是把當前的分為兩半。
一半切k-1刀,另外一半是這1刀。
這樣就合併成了。
全部**如下:
#include#define ll long longusing
namespace
std;
int n,tu[10][10
];ll sum[
10][10
];ll f[
20][10][10][10][10
];int
main()
for(int k=2;k<=n;k++)
for(int i=1;i<=8;i++)
for(int j=1;j<=8;j++)
for(int x=i;x<=8;x++)
for(int y=i;y<=8;y++)
printf(
"%lld\n
",f[n][1][1][8][8
]);
return0;
}
Luogu1436 棋盤分割(動態規劃)
無 將乙個 的棋盤進行如下分割 將原棋盤割下一塊矩形棋盤並使剩下部分也是矩形,再將剩下的兩部分中的任意一塊繼續如此分割,這樣割了 n 1 次後,連同最後剩下的矩形棋盤共有n塊矩形棋盤。每次切割都只能沿著棋盤格仔的邊進行 原棋盤上每一格有乙個分值,一塊矩形棋盤的總分為其所含各格分值之和。現在需要把棋盤...
Luogu P1436 棋盤分割 題解
嗯,點開題目,哇!是一道閃亮亮的藍題 不要被嚇到了,其實,這道題就是乙個簡單的dp啦 我們設 f x1 y1 x2 y2 c 為以 x1,y1 為左上角,以 x2,y2 為右下角的矩形分割成c個部分所取得的最大分數。列舉每一行 列 將其分割成兩部分,然後考慮是繼續分割上 左 邊還是下 右 邊 所以,...
洛谷 1436 棋盤分割
一道經典的dp題目,應該並沒有提高 拉莫難。思路 搞懂題意後 這點也很重要 我們首先考慮棋盤的分割情況,不難發現 然後我們考慮狀態的設計和轉移 ac 吧 include include include include using namespace std intread intn,b,x int ...