有n(n
≤30
)n(n≤30)
n(n≤30
)種立方體,每種都有無窮多個。要求選一些立方體摞成一根盡量高的柱子(可以自行選擇哪一條邊作為高),使得每個立方體的底面長寬分別嚴格小於它下方立方體的底面長寬。
#include
#include
#include
#include
using
namespace std;
struct node
}st[
200]
;int dp[
200]
;//狀態矩陣
intcmp
(node a, node b)
intmain()
sort
(st, st + num, cmp)
;// 按底面積排序
int ans =0;
// i 作為最下面考慮
for(
int i =
0; i < num; i++)}
printf
("case %d: maximum height = %d\n"
, t++
, ans);}
return0;
}
或者
#include
#include
#include
#include
using
namespace std;
const
int maxn =
200;
int n, num;
bool g[maxn]
[maxn]
;int dp[maxn]
;struct node
}st[
200]
;bool
check
(int i,
int j)
intd
(int k)
intmain()
memset
(g,0
,sizeof
(g))
;for
(int i =
0; i < num; i++)}
int ans =0;
memset
(dp,-1
,sizeof
(dp));
for(
int i =
0; i < num; i++
) ans =
max(ans,
d(i));
// 找出dp中最大值
printf
("case %d: maximum height = %d\n"
, t++
, ans);}
return0;
}
uva437 巴比倫塔
題意 見紫書 題解 一道水得不能再水的大水題,卻讓我給想多了 每種立方體的長寬高有6種不同的情況,把輸入的拆成6個來考慮 用最長上公升子串行的思維,狀態轉移方程 dp i max dp i dp j p i h 因為開始時立方體是無序的,所以按長或者寬或者什麼神奇的東西拍個序 使能夠讓第i個立方體堆...
紫書 UVa437巴比倫塔
題解 這個就是矩形巢狀的改變,把2d變為3d了,然後加1變為加上他們的高度 注意點是乙個矩形可以有三種不同的形態 include include include using namespace std int n int p 儲存各個矩形的數量,乙個矩形有三種 struct juxju 910 in...
UVA 437 巴比倫塔(DAG上的動態規劃
紅書上的動態規劃專題 題意 有n種立方體,每種都有無窮多個,要求選一些立方體摞成一根盡量高的柱子,可以自行選一邊當多高,使得每個立方體的底面長寬分別嚴格小於它下方的立方體的底面長寬 思路 各個立方體 能否被摞 關係是乙個典型的二元關係,二元關係可以用圖來建模,如果b能摞在a上,a到b就有一條有邊向,...