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)
對於每一組測試資料輸出一行,為最少需要的塊數。
24 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揹包問...