hdu 1069 記憶化搜尋 dp

2021-06-26 16:17:04 字數 797 閱讀 8351

題目鏈結

題意:有n種長方體,每個都有無數個,分別告訴你它們的長寬高,問最多能疊多高,要求是上面的長方體的地面積的長和寬都要比下面的長方體的小,長方體可以旋轉,就是說放的時候可以以任意一面作為底面積。

思路:用a[i][j]來記錄第i種長方體的第j條邊的高,用dp[i][j]表示以第i個長方體為底且以第j條邊為高時能達到的最大高度,此時使用記憶化搜尋,用vis陣列來表示是否搜過,如果搜過,就直接輸出結果,否則再進行搜尋操作,這樣可是提高程式的效率,搜素時,列舉每個長方體以及最為高的那條邊,判斷是否滿足上面的長和寬比下面的小這一條件,是就往下搜素,最後記錄下最大的那個值,就是我們要求的那個dp值。

#include#include#includeusing namespace std;

int dp[33][3];

bool vis[33][3];

int n;

int a[33][3];

int dfs(int i,int j)

else if(j==1)

else if(j==2)

for(int ii=0;iib1&&a2>b2||a1>b2&&a2>b1)

ans=max(dfs(ii,jj)+a[ii][jj],ans);

}return dp[i][j]=ans;

}int main()

{ int cas=1;

while(cin>>n&&n){

memset(dp,0,sizeof(dp));

memset(vis,0,sizeof(vis));

for(int i=0;i

hdu1069 記憶化搜尋

此題思路還是比較清晰的,對於每個x,y,z,都會有三種情況,dp i 表示把第i個放在最下面得到的最大高度,狀態轉移方程為dp i max dp i dp j height 這裡的j要滿足能夠放在i上面,height為第i個矩形的高度 如下 include include include inclu...

HDU1069 猴子疊木塊

題目 研究人員有n種型別的塊,並且每種型別的塊都是無限制的。每個i型塊是具有線性尺寸 xi,yi,zi 的矩形固體。塊可以重新定向,使得它的三個維度中的任何兩個確定基座的尺寸,而另乙個尺寸是高度。他們想要確保通過堆放塊可能的最高的塔可以到達屋頂。問題在於,在建造塔架時,只能將一塊塊放置在另一塊的頂部...

HDU 1069 基礎動態規劃 排序

題意 給出n種立方體石頭 當且僅當一塊石頭的底部寬度長度都小於一塊石頭的時候才能放在上面 問最高能放多高?石頭不限數目 然而同樣一種石頭採用同樣的擺放方式 兩快相同石頭一定無法進行放置 所以 一塊石頭的一種擺放方式最多使用一次 進行一下排序 讓長與寬最小的放在最前面 然後就是可愛的dp模板了 inc...