洛谷P1064 金明的預算方案(分組揹包)

2021-09-26 04:47:07 字數 820 閱讀 8412

其實一開始並不是用分組揹包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元錢就行 今天一早,金明就開始做預算了,他把想買的物品分為兩類 主件與附件,附件是從屬於某個主件的,下表就是一些主件...