題意:見紫書
題解:一道水得不能再水的大水題,卻讓我給想多了
每種立方體的長寬高有6種不同的情況,把輸入的拆成6個來考慮
用最長上公升子串行的思維,狀態轉移方程 dp[i]=max(dp[i],dp[j]+p[i].h);
因為開始時立方體是無序的,所以按長或者寬或者什麼神奇的東西拍個序
使能夠讓第i個立方體堆上的所有合法方案一定都在前i-1個立方體裡面就可以
啊啊啊,我竟然沒想出來,看了題解後簡直想捶自己。。。
code:
#include#include#include#include#include#includeconst int maxn=185;
using namespace std;
struct nodep[maxn];
int cas,n,a,b,c,dp[maxn];
bool cmp(node t1,node t2)
int main()
; p[n+i]=(node);
p[n*2+i]=(node);
p[n*3+i]=(node);
p[n*4+i]=(node);
p[n*5+i]=(node);
}n*=6; int ans=0;
sort(p+1,p+n+1,cmp);
for(int i=1;i<=n;i++)
{dp[i]=p[i].c;
for(int j=1;j
27 巴比倫塔 UVa 437
有n n 30 n n 30 n n 30 種立方體,每種都有無窮多個。要求選一些立方體摞成一根盡量高的柱子 可以自行選擇哪一條邊作為高 使得每個立方體的底面長寬分別嚴格小於它下方立方體的底面長寬。include include include include using namespace std...
紫書 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就有一條有邊向,...