T1387 搭配購買 buy

2022-08-09 10:45:07 字數 1056 閱讀 2566

joe覺得雲朵很美,決定去山上的商店買一些雲朵。商店裡有n朵雲,雲朵被編號為1,2,…...,n,並且每朵雲都有乙個價值。但是商店老闆跟他說,一些雲朵要搭配來買才好,所以買一朵雲則與這朵雲有搭配的雲都要買。

但是joe的錢有限,所以他希望買的價值越多越好。

第1行n,m,w,表示n朵雲,m個搭配,joe有w的錢。

第2~n+1行,每行ci,di表示i朵雲的價錢和價值。

第n+2~n+1+m行,每行ui,vi,表示買ui就必須買vi,同理,如果買vi就必須買ui。

一行,表示可以獲得的最大價值。

5 3 10

3 10

3 10

3 10

5 100

10 1

1 33 2

4 2

1

並查集 + 01揹包;

並查集 將搭配的雲彩都整合起來;

01揹包進行獲取最大價值;

1 #include2

using

namespace

std;

3const

int maxn = 10010;4

intn, m, k, f[maxn], dp[maxn], ci[maxn], di[maxn];

5struct

nodet[maxn];

8void

init()

11int getf(int

v)15

void meg(int v, int

u)19

intmain()

28for(int i = 1; i <= n; i++) getf(i);

29for(int i = 1; i <= n; i++)

33for(int i = 1; i <= n; i++)

38} 39}

40 cout << dp[k] <

41return0;

42 }

購買搭配

1387 搭配購買 buy

題目描述 joe覺得雲朵很美,決定去山上的商店買一些雲朵。商店裡有n朵雲,雲朵被編號為1,2,n,並且每朵雲都有乙個價值。但是商店老闆跟他說,一些雲朵要搭配來買才好,所以買一朵雲則與這朵雲有搭配的雲都要買。但是joe的錢有限,所以他希望買的價值越多越好。輸入 第1行n,m,w,表示n朵雲,m個搭配,...

SSL ZYC 2347 搭配購買

題目大意 現在有n件商品,其中m組買了乙個就必須買另外乙個。求k元錢的最大價值。思路 如果沒有第二句話就是乙個普通的01揹包。既然這樣,那這道題是否可以轉換為01揹包呢?答案很明顯是可以的。可以利用並查集,將這m組配對購買的商品劃到乙個集合裡,這樣就可以確定買了其中乙個就得買另乙個。最後就是01揹包...

洛谷 P1455 搭配購買

給定n件物品 容量為sum的揹包,購買一件物品需要購買它所依賴 的物品,求最大價值 1 並查集 2 tarjan縮點 本文採取第二種方法 將乙個強連通塊縮成乙個點,費用和價值累加,最後揹包dp即可 邊集 原圖 edge i 乙個點是否在棧內 instack i 1或0 新圖 bcc cnt 新節點費...