題目大意:有很多個箱子和一些物品,想買箱子中的物品必須先買下箱子,求在規定的錢數里最多能買多大價值的東西
sample input
3 800sample output300 2 30 50 25 80
600 1 50 130
400 3 40 70 30 40 35 60
210emmm,沒什麼好說的,就是板子套一套完事了。依賴揹包分為主件和附件,解決這類問題就是對每個主件從dp陣列中copy乙個tmp陣列,然後讓這個主件中的附件對tmp陣列做01揹包,之後對每個值加上主件的體積和價值求乙個max就ok了
以下是ac**:
#include #include#include
using
namespace
std;
const
int mac=1e5+10
;int
dp[mac],f[mac];
int poj[55][20],s[55],bag[55],val[55][20
];int
main()
for (int i=1; i<=n; i++)
printf(
"%d\n
",dp[w]);
}return0;
}
HDU 3449 依賴揹包
這道題雖然水水的,但是還是成功地給我增加了10多個wa。最開始拿著題,一看,依賴揹包嘛 直接dfs樹形dp嗨起來,甚至連記憶體都沒有算一下,3mle 然後又仔細看了一下題,沒有必要用樹形揹包來做嘛,對每個揹包01,就可以得到每個揹包的泛化物品。結果又沒有注意 把它們泛化物品的和寫成了完全揹包 囧 w...
hdu3449 有依賴的揹包問題
典型的有依賴的揹包,每個箱子是 主件 每個箱子所對應的物品是他的 附件 有依賴的揹包的過程就是把沒一組主件和附件的集合中附件跑一遍01揹包,然後把主件強加到跑完後的陣列裡,然後再在雖有的集合中選擇最優的dp i 的值,這樣更新到最後就行了,這樣更新 跑附件之間的01揹包後強加主件是對應著題意的必須有...
hdu3449 有依賴的揹包問題
典型的有依賴的揹包,每個箱子是 主件 每個箱子所對應的物品是他的 附件 有依賴的揹包的過程就是把沒一組主件和附件的集合中附件跑一遍01揹包,然後把主件強加到跑完後的陣列裡,然後再在雖有的集合中選擇最優的dp i 的值,這樣更新到最後就行了,這樣更新 跑附件之間的01揹包後強加主件是對應著題意的必須有...