方磚問題(動態規劃)

2021-07-04 06:09:30 字數 872 閱讀 7556

time limit: 1 sec  

memory limit: 128 mb

submit: 6  

solved: 2 [

submit][

status][

web board]

用邊長小於n的正方形方磚(注意,不要求所有的方磚大小相同,請看樣例說明)不重疊地鋪滿n*n的正方形房間,最少要幾塊方磚。

可以將n*n的大正方形分成若干的小矩形,然後對每乙個小矩形遞迴地求解,但是分塊方法應該具有普遍性,而且分塊數目應該盡量地少。最好的情況莫過於將正方形分成兩塊,對於這道題,我們可以考慮將正方形分成n*k和n*(n-k)的兩塊小矩形,每一塊都恰好被邊長小於n的正方形以最優的方式填滿(即數目最小的填充方式)。使用動態規劃法,可得遞迴方程為: 

問要鋪滿邊長為n的正方形,需幾種方磚,使得方磚塊數最少。

第一行是乙個整數t,表示測試資料的組數,接下來的t 行,每一行是乙個n(2<=n<=100)

對於每一組測試資料輸出一行,為最少需要的塊數。

2 

4 5

4 

8

最優的鋪磚方法

aabbaabbccddccdd

a,b,c,d為四塊方磚的代號。

其他的鋪法,例如:

aaabaaacaaadefgh

需要的8塊磚,不是最少的。

#include#include#include#include#define infinity 0x3f3f3f3f

using namespace std;

int a[104][105];

int slove(int n)

else

}

搬磚 動態規劃

小易有n塊磚塊,每一塊磚塊有乙個高度。小易希望利用這些磚塊堆砌兩座相同高度的塔。為了讓問題簡單,磚塊堆砌就是簡單的高度相加,某一塊磚只能使用在一座塔中一次。小易現在讓能夠堆砌出來的兩座塔的高度盡量高,小易能否完成呢。輸入描述 輸入包括兩行 第一行為整數n 1 n 50 即一共有n塊磚塊 第二行為n個...

動態規劃 狀態壓縮 廣場鋪磚問題

有乙個n行m列的廣場,需要用1 2小磚鋪蓋,小磚之間互相不能重疊,問有多少種不同的鋪法?題解設f i j f i j f i j 表示第i ii行,狀態為j jj的方案數。在狀態j jj中,1 11表示豎著放長方形的上半部分。0 00表示其餘部分。顯然上一排空缺的部分肯定是要豎著放置的。就看剩下橫著...

動態規劃問題

思想 如果乙個問題是由交疊的子問題所構成,那麼我們就可以用動態規劃技術來解決它。一般來說,這樣的子問題出現在對給定問題求解的遞迴關係中。這個遞推關係包含了相 同問題的更小子問題的解。動態規劃法建議,與其對交疊子問題一次又一次的求解,不如把每個較小子問題只求解一次並把結果記錄在表中。例題 0 1揹包問...