題意:中文省略.
思路:黑說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...