1191:棋盤分割
檢視提交統計提示提問
總時間限制: 1000ms 記憶體限制: 65536kb
描述將乙個8*8的棋盤進行如下分割:將原棋盤割下一塊矩形棋盤並使剩下部分也是矩形,再將剩下的部分繼續如此分割,這樣割了(n-1)次後,連同最後剩下的矩形棋盤共有n塊矩形棋盤。(每次切割都只能沿著棋盤格仔的邊進行)
原棋盤上每一格有乙個分值,一塊矩形棋盤的總分為其所含各格分值之和。現在需要把棋盤按上述規則分割成n塊矩形棋盤,並使各矩形棋盤總分的均方差最小。
均方差,其中平均值,xi為第i塊矩形棋盤的總分。
請程式設計對給出的棋盤及n,求出o'的最小值。
輸入第1行為乙個整數n(1 < n < 15)。
第2行至第9行每行為8個小於100的非負整數,表示棋盤上相應格仔的分值。每行相鄰兩數之間用乙個空格分隔。
輸出僅乙個數,為o'(四捨五入精確到小數點後三位)。
樣例輸入
31 1 1 1 1 1 1 3
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 0
1 1 1 1 1 1 0 3
樣例輸出
1.633
**noi 99
一塊棋盤一共有四種分割方式,豎著切然後一遍保留繼續切,一邊切掉,橫著切,一邊保留,一邊切掉,對保留下來的那塊棋盤,繼續做同樣的工作。
#include #include #include int board[9][9];
int sum[9][9];
int res[15][9][9][9][9];
int calsum(int x1, int y1, int x2, int y2)
int min(int a, int b)
int fanc(int n, int x1, int y1, int x2, int y2)
for(int i = x1; i < x2; i++)
for(int j = y1; j < y2; j++)
res[n][x1][y1][x2][y2] = minf;
return minf;
}int main()
}double ans = n * fanc(n, 1, 1, 8, 8) - sum[8][8] * sum[8][8];
printf("%.3f\n", sqrt((double)ans / (n*n)));
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...