HDU 2191多重揹包問題

2022-05-15 21:40:46 字數 924 閱讀 1034

1 #include2 #include3 #include4 #include5

const

int qq=2000+50;6

intv[qq],w[qq],dp[qq];

7using

namespace

std;

8int

main()929

if(tot)33}

34for(int i=1;ii)

35for(int j=n;j>=v[i];--j) //

j必須從n開始dp,如果循序開始dp的話v[i]會被取多次

36 dp[j]=max(dp[j],dp[j-v[i]]+w[i]); //

也就是說達不到01揹包要求的v[i]只有取和不取兩種狀態、

37 printf("

%d\n

",dp[n]); 38}

39 }

演算法時間複雜度o(v*∑log n[i])

總算是理解了為什麼要逆序dp

#include 02.#include   

03.#include 04.using

namespace

std;

05.int

main()

06.

28. }

29. }

30. printf("

%d\n

",temp);

31. }

32. return

0;

33.}

上述**是借鑑別人的、   也是多重揹包最原始的解法

時間複雜度o(v*∑n[i])

HDU 2191 多重揹包問題

題目資訊 problem description 急!災區的食物依然短缺!為了挽救災區同胞的生命,心繫災區同胞的你準備自己採購一些糧食支援災區,現在假設你一共有資金n元,而市場有m種大公尺,每種大公尺都是袋裝產品,其 不等,並且只能整袋購買。請問 你用有限的資金最多能採購多少公斤糧食呢?input ...

HDU 2191 多重揹包

problem description 急!災區的食物依然短缺!為了挽救災區同胞的生命,心繫災區同胞的你準備自己採購一些糧食支援災區,現在假設你一共有資金n元,而市場有m種大公尺,每種大公尺都是袋裝產品,其 不等,並且只能整袋購買。請問 你用有限的資金最多能採購多少公斤糧食呢?後記 人生是乙個充滿了...

HDU 2191 多重揹包

題目大意 有m種公尺,給出每種公尺花費,重量和數量,問n元能獲得的最大重量是多少 題目思路 對於每個包,如果數量 花費 n,那麼很明顯直接多重揹包即可,否則就需要用到二進位制拆分法。由於0 2 k 1內所有的數字都可以通過2 0 2 1 2 2.2 k 1 中若干個數字得到。那麼可以把數量為c的物品...