總結好吧_我太懶了……
題目鏈結
典型的樹形dp,不過我不會但是我用的是另外一種分析題目的方法。
每個主件可以有0個、1個或2個附件。
沒錯,這幾個字就是關鍵!
可以有這樣five kinds of狀態:
1) 不選該件物品
2) 只選主件
3) 選主件+第乙個附件
4) 選主件+第二個附件
5) 選主件+第乙個附件+第二個附件
總結成狀態轉移方程就是 :
dp[j]
=max
雖然看上去狀態轉移方程很複雜,實際寫出來也很複雜其實是很好寫的。
所以狀態轉移方程一出來,dp也就有解了……
如果這道題可以有無限個附件的話,這個方案的複雜度就很大,最多有o(2^n),所以這個方法在乙個物體的附件較少的情況下使用。
可能較正解樹狀dp要簡單一些,不過資料大了我也不知道要慢多少
(想一想0-1揹包o(2^n) 和 o(vn)的差距吧 )……
#include
#include
using
namespace std;
#define reg register
inline
intread()
while
(c>=
'0'&&c<=
'9') a=
(a<<1)
+(a<<3)
+c-'0'
,c=getchar()
;return a*f;
}inline
void
write
(int x)
int v=
read()
,n=read()
;struct node
}a[61];
int dp[
32001];
int son[61]
[3];
int s[61]
;bool flag[61]
;inline
intmax
(int a,
int b)
inline
intmax
(int a,
int b,
int c,
int d,
int e)
intmain()
for(reg int i=
1;i<=n;i++
)write
(dp[v]);
}
金明的預算方案
problem description 金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間金明自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說 你的房間需要購買哪些物品,怎麼布置,你說了算,只有不超過n元錢就行 今天一早,金明就開始做預算了,他把想買的物品分為兩類 主件和附件,附件是從屬...
金明的預算方案
題目描述 金明今天很開心,媽媽昨天對他說 你的房間需要購買哪些物品,你說了算,只要不超過n元錢就行 今天一早,金明就開始做預算了,他把想買的物品分為兩類 主件與附件,附件是從屬於某個主件的,下表就是一些主件與附件的例子 主件 附件 電腦 印表機,掃瞄器 書櫃 圖書 書桌 檯燈,文具 工作椅 無 如果...
金明的預算方案
題目 分析一下,若想選附件,必然要選其主件,看上去是個依賴揹包問題,也就是樹形dp,但是這個題目限制了乙個問題,也就是乙個主件至多有2個附件,那麼也就只有4種方案,只選主件,選主件和附件1,選主件和附件2,選主件和附件1和附件2。只有4種方案,所以將其轉化成為乙個組合揹包問題。include inc...