棋盤分割 POJ 1191

2022-02-19 12:42:52 字數 1219 閱讀 9211

1、題目型別:dp、概率論。

2、解題思路:dp遞推式(以上下切為例):

for i=x1...x2

sum[k][x1][y1][x2][y2]=min}; 

其中 i 表示切割位置,k 表示切割次數。

3、注意事項:遞迴迴圈的呼叫。

4、參考部落格:

5、實現方法:

#include

<

iostream

>

#include

<

cmath

>

using

namespace

std;

const

intinf

=0xffffff

;int

map[9][

9],bak[9][

9][9][

9];double

sum[

16][9][

9][9][

9];//返回區域的和的平方

intgetsum(

intx1,

inty1,

intx2,

inty2)

//記錄任何矩形區域的和的平方

void

init()

double

getmin(

double

x,double

y)double

dp(int

k,int

x1,int

y1,int

x2,int

y2)//

進行左右切

for( j

=y1; j

<

y2;

++j )

return

sum[k][x1][y1][x2][y2];

}int

main()

}init();

memset(sum,-1

,sizeof

(sum));

all/=

n;dp(n,1,

1,8,

8);ans=

sqrt(sum[n][1][

1][8][

8]/n

-all

*all);

printf(

"%.3f\n

",ans);

return1;

}

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 棋盤分割

題目點我 經典的動態規劃題目,首先將標準差公式變形一下 ni 1 xi x 2n n 2 x 2 i 1nx 2i由於x 是固定的,與分割方案無關,所以求最小的標準差就相當於求最小的平方和的分割方案。定義狀態需要五個維度 描述乙個矩形需要四個維度 左上角座標x1 y1 和右下角座標x2 y2 要分割...