動態規劃 遞迴 poj1191,棋盤分割

2021-07-08 14:21:19 字數 791 閱讀 7639

明白幾點:

1)最終的均方差

2)動歸含義:

dp[n][x1][x2][y1][y2]
表示由x1,x2,y1,y2組成的矩形要生成n塊小矩陣,均方差的最小值(sigma[ i:1-m ]( xi*xi ));它的值需要遍歷所有橫向切、縱向切的可能,然後取最小值。最終結果是dp[n][1][8][1][8],不多說。

# include# include# includeusing namespace std;

# define n 16

# define inf 1000000000

int data[9][9];

int dp[n][9][9][9][9];

int onepart[9][9][9][9];

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

} return sum;

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

else }

memset(dp,-1,sizeof(dp));

for(x1=1;x1<=8;x1++)

}} }

partition(n,1,8,1,8);

printf("%.3f\n", sqrt( dp[n][1][8][1][8]*1.0/n - (sum*1.0/n)*(sum*1.0/n) ) );

return 0;

}

POJ 1191 棋盤分割 動態規劃

詳見 include include include include include include using namespace std int n,sum 10 10 sum i j 表示以i,j為右下角的矩陣的和 int dp 15 10 10 10 10 int tot 10 10 10 ...

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,利用二維線段樹組將矩形塊的和求出來返回即可。剪枝 當訪問到同個矩形塊,相同切割份數時,...