pku 1191 棋盤分割 DP 記憶化搜尋

2022-05-24 01:42:09 字數 2179 閱讀 5388

題意:中文省略.

思路:黑說p116有講解,

主要的狀態轉移方程為

橫著切: 

dp[k][x1][y1][x2][y2]  = min(dp[k - 1][x1][y1][mid][y2] + dp[1][mid][y1][x2][y2],dp[k - 1][mid][y1][x2][y2] + dp[1][x1][y1][mid][y2]);   x1 + 1 <= mid < x2

豎著切:

dp[k][x1][y1][x2][y2]  = min(dp[k - 1][x1][y1][x2][mid] + dp[1][x1][mid][x2][y2],dp[k - 1][x1][mid][x2][y2] + dp[1][x1][y1][x2][mid]);  y1 + 1<=  mid < y2

view code 

#include 

#include 

#include 

#include 

#define maxn 17

#define n 8

using

namespace std;

const

int inf = 99999999;

int dp[maxn][9][9][9][9];

int map[9][9];

int getdp(int k,int x1,int y1,int x2,int y2)

for (mid = y1 + 1; mid 

return ans;

}int main()

//出事話dp將所有劃分成乙個的求出來

memset(dp,0,sizeof(dp));

for (x1 = 0; x1 

for (y1 = 0; y1 

for (x2 = x1 + 1; x2 <= n; ++x2)

for (y2 = y1 + 1; y2 <= n; ++y2)

//列舉求解

for (k = 2; k <= n; ++k)

for (x1 = 0; x1 

for (y1 = 0; y1 

for (x2 = x1 + 1; x2 <= n; ++x2)

for (y2 = y1 + 1; y2 <= n; ++y2)

double ans = (1.0*dp[n][0][0][8][8])/n - (1.0*sum*sum)/(n*n*1.0);

printf("

%.3lf\n

",sqrt(ans));

return

0;記憶化搜尋:

這裡只要能夠推出狀態轉移方程,其實記憶化搜尋就很好寫了。

view code 

#include 

#include 

#include 

#include 

#define maxn 17

#define n 8

using

namespace std;

const

int inf = 99999999;

int dp[maxn][9][9][9][9];

int map[9][9];

/*int getdp(int k,int x1,int y1,int x2,int y2)

for (mid = y1 + 1; mid 

return ans;}*/

int gets(int x1,int y1,int x2,int y2)

int dp(int k,int x1,int y1,int x2,int y2)

int ans = inf;

//橫向切割

for (mid = x1 + 1; mid 

//縱向切割

for (mid = y1 + 1; mid 

dp[k][x1][y1][x2][y2] = ans;

return ans;

}int main()

memset(dp,0,sizeof(dp));

int tmp = dp(n,0,0,8,8);

double ans = (1.0*tmp)/n - (sum*sum*1.0)/(n*n*1.0);

printf("

%.3lf\n

",sqrt(ans));

return

0;

poj1191 棋盤分割 (DP)

題目意思 在乙個8 8的棋盤中要劃分成n塊,並且方差最小 解題思路 用乙個5維的陣列來記錄狀態st k x1 y1 x2 y2 表示在第k次時從 x1,y1 到 x2,y2 的矩形切出的和的平方的和 就是已經分兩塊了,只是這個陣列沒表示從 切 然後遞迴到前面一次,選擇兩個中的一塊繼續遞迴。0ms a...

poj 1191 棋盤分割(dp

題意 將乙個 的棋盤 每個單元正方形有個分值 沿直線 豎或橫 割掉一塊,留下一塊,對留下的這塊繼續這樣操作,總共進行n 1次,得到n塊 1 n 15 矩形,每個矩形的分值就是單元正方形的分值的和,問這n個矩形的最小均方差。此題中,均方差比較,等價於方差比較,等價於平方和比較。狀態 dp x1 y1 ...

poj1191 棋盤分割 (DP)

題目意思 在乙個8 8的棋盤中要劃分成n塊,並且方差最小 解題思路 用乙個5維的陣列來記錄狀態st k x1 y1 x2 y2 表示在第k次時從 x1,y1 到 x2,y2 的矩形切出的和的平方的和 就是已經分兩塊了,只是這個陣列沒表示從 切 然後遞迴到前面一次,選擇兩個中的一塊繼續遞迴。0ms a...