其實一開始並不是用分組揹包ac的(當是還沒學),而是01揹包加分類討論過的,但寫的很複雜,覺得應該有更簡單的演算法,查了才知道可以用分組揹包的。
分組就是將主件與附件看成是同一組內的,主件與其他主件為不同組。同一組內有4種方案,取主件,取主件+附件1,取主件+附件2,取主件+附件3,這幾個方案都是互斥的,符合分組揹包的特點。
分組揹包的ac**:
#include#include#include#include#includeusing namespace std;
typedef long long ll;
const int maxn=32000+5;
vectorv[61],val[61];
ll dp[maxn];
bool is_main[61]=;
int main()
else
}} ll ans=0;
cout《分類討論需要設定結構體完成dp,在下面的**中會有解釋。
#include#include#include#includeusing namespace std;
typedef long long ll;
const int maxn=32000+5;
struct subject
}dp[maxn];
ll v[61],val[61];
int fa[61];
int main()
for(int i=1;i<=m;i++)
for(int j=n;j>=v[i];j--)}}
} cout
洛谷 P1064 金明的預算方案
題目描述 金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間金明自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說 你的房間需要購買哪些物品,怎麼布置,你說了算,只要不超過n元錢就行 今天一早,金明就開始做預算了,他把想買的物品分為兩類 主件與附件,附件是從屬於某個主件的,下表就是一些主件...
洛谷 P1064 金明的預算方案
這是乙個揹包型別的問題,但是存在附件這個問題,因為要拿附件就一定要拿主件,而且附件最多只有2種,假設有2種附件,那麼這個物品就有三種狀態 第一種就是只拿主鍵,dp j max dp j dp j now i v now i v now i p 第二種就是那主鍵和第乙個附件 dp j max dp j...
洛谷 P1064 金明的預算方案
題目描述 金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間金明自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說 你的房間需要購買哪些物品,怎麼布置,你說了算,只要不超過n元錢就行 今天一早,金明就開始做預算了,他把想買的物品分為兩類 主件與附件,附件是從屬於某個主件的,下表就是一些主件...