棋盤分割(二維區間DP)

2022-08-15 06:57:19 字數 709 閱讀 5291

題目大意:給乙個棋盤,棋盤上每個格仔中都有乙個值,現在需要將棋盤切成n個矩形,總共切n-1刀,求最小的均方差。均方差定義為:

,其中。題目分析:將均方差化簡得到:均方差2=(σxi

2)/n-平均值2。顯然,平均值2是定值,為數字總和除以n。只需讓矩形的和的平方和最小即可。先預處理出陣列s(x1,y1,x2,y2),表示左上角為(x1,y1),右下角為(x2,y2)的矩形上數字和的平方,定義dp(k,x1,y1,x2,y2)表示將矩形(x1,y1,x2,y2)切k刀能獲得k+1個矩形時各矩形上數字和的最小平方和。則狀態轉移方程為:dp(k,x1,y1,x2,y2)=min

void work(int x,int y)

void init()

void ceshi()

for(int i=ya;i

return u;

}int main()

sum/=(double)n;

memset(s,0,sizeof(s));

init();

//ceshi();

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

dfs(n-1,0,0,7,7);

double ans=(double)dp[n-1][0][0][7][7]/(double)n-sum*sum;

printf("%.3lf\n",sqrt(ans));

}return 0;

}

洛谷P1436 棋盤分割 題解 二維區間DP

這道題目和 演算法藝術與資訊學競賽 的題目描述稍微有點區別 這裡是求平方和的最小值,書上是方差的最小值 不過解法都是一樣的,就是區間dp,我這裡使用記憶化搜尋實現。f r1 c1 r2 c2 m 表示以 r1,c1 為左上角的格仔,以 r2,c2 為右下角的格仔,並且分成 m 份的最小平方和。實現 ...

分割等和子集 遞迴 二維dp 一維dp

問題描述 給定乙個只包含正整數的非空陣列。是否可以將這個陣列分割成兩個子集,使得兩個子集的元素和相等。大體思路 由於想將陣列分割為兩個和相同的子集,因此可以先獲得陣列整體的和,然後該問題可以轉化為找陣列中是否存在某幾個元素之和等於總和的一半。注 若總和為奇數則可以直接返回false,由於陣列全為正整...

平面二維DP

馬攔過河卒 原題傳送門 這一到題目也是比較基礎的動態規劃,也可以理解為是遞推,主要是運用加法原理,思維難度不大。我們要求從 0,0 到 n,n 的方案總數,如果沒有馬的話,我們可以這麼做 設 f i j 為從 0,0 走到 i,j 的方案總數,我們知道一定是有上面和左邊走來,所以只需要累加上面和左邊...