POJ 1191 棋盤分割

2021-07-03 22:46:07 字數 1428 閱讀 2059

題目點我

經典的動態規劃題目,首先將標準差公式變形一下: σ=

∑ni=

1(xi

−x¯)

2n−−

−−−−

−−−−

−−√⇒

n(σ2

+x¯2

)=∑i

=1nx

2i由於x¯

是固定的,與分割方案無關,所以求最小的標準差就相當於求最小的平方和的分割方案。定義狀態需要五個維度:描述乙個矩形需要四個維度(左上角座標x1

,y1 和右下角座標x2

,y2 )+要分割的塊數n

dp[x

1][y

1][x

2][y

2][n

]=∑i

=1nx

2i狀態轉移方程如下,其中s[

x1][

y1][

x2][

y2] 表示這塊棋盤權值之和的平方dp

[x1]

[y1]

[x2]

[y2]

[n]=

min(

y1≤h

ori),mi

n(x1

≤ver

t)}

#include 

#include

#include

#include

#define inf 100000000

int ans[10][10][10][10][17];

bool vis[10][10][10][10][17];

int matrix[10][10];

int min(int a, int b)

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

}sum = sum * sum;

ans[x1][y1][x2][y2][1] = sum;

vis[x1][y1][x2][y2][1] = true;

return sum;

}int dp(int x1, int y1, int x2, int y2, int n)

for(vert = x1; vert < x2; vert++)

ans[x1][y1][x2][y2][n] = tmpdp;

vis[x1][y1][x2][y2][n] = true;

return tmpdp;

}int main()

}xbar = xbar / n;

long

double tmp = dp(0, 0, 7, 7, n);

tmp = sqrt((tmp / n) - xbar * xbar);

printf("%.3f\n", tmp);

return

0;}

poj 1191 棋盤分割

棋盤分割 time limit 1000ms memory limit 10000k total submissions 10807 accepted 3798 description 將乙個 的棋盤進行如下分割 將原棋盤割下一塊矩形棋盤並使剩下部分也是矩形,再將剩下的部分繼續如此分割,這樣割了 n...

POJ 1191 棋盤分割

題意 給定一8 8的棋盤,每次沿著邊將棋盤切成兩部份,把一部分放到一邊,再繼續切另一部分,切n 1次得到n個矩形塊,問使n個塊的和能達到的最小方差。題解 顯然可以每次遍歷對矩形塊的橫切和豎切,當dfs到份數等於1,利用二維線段樹組將矩形塊的和求出來返回即可。剪枝 當訪問到同個矩形塊,相同切割份數時,...

棋盤分割 POJ 1191

1 題目型別 dp 概率論。2 解題思路 dp遞推式 以上下切為例 for i x1.x2 sum k x1 y1 x2 y2 min 其中 i 表示切割位置,k 表示切割次數。3 注意事項 遞迴迴圈的呼叫。4 參考部落格 5 實現方法 include iostream include cmath ...