HDU 2199 多重揹包轉化為01揹包

2021-07-09 20:28:15 字數 844 閱讀 1774

現在假設你一共有資金n元,而市場有m種大公尺,每種大公尺都是袋裝產品,其**不等,並且只能整袋購買。

請問:你用有限的資金最多能採購多少公斤糧食呢?

輸入資料首先包含乙個正整數c,表示有c組測試用例,每組測試用例的第一行是兩個整數n和m(1<=n<=100, 1<=m<=100),分別表示經費的金額和大公尺的種類,然後是m行資料,每行包含3個數p,h和c(1<=p<=20,1<=h<=200,1<=c<=20),分別表示每袋的**、每袋的重量以及對應種類大公尺的袋數。

01揹包是基礎的基礎:

01揹包是每種物品數量僅限為1,而多重揹包中對每種物品的數量都有相應的限制。這題是告訴了我們每種大公尺的重量、**、數量,可以轉化為單純的01揹包問題求解。

#include

#include

#include

using

namespace

std;

#define n 2000+10 //注意dp的開闢的儲存空間,

#define loop(i,k,n) for(i=k;i<=n;i++)

#define loop2(i,k,n) for(i=n;i>=k;i--)

int dp[n],p[n],w[n],num[n];

int main()

t=s;

}memset(dp,0,sizeof(dp));

loop(i,1,t)

loop2(j,p[i],m)

dp[j]=max(dp[j],dp[j-p[i]]+w[i]);

printf("%d\n",dp[m]);

}return

0;}

多重揹包轉化為01揹包的方法與思路

多重揹包 多重揹包問題 給定n 種物品和乙個容量為 v的揹包,第 i種物品的質量為 weight i 價值為 value i 數量是 num i 件。可以任意選擇裝入揹包的物品,求裝入揹包中物品的總價值。這種問題和完全揹包一樣,可以直接套用01 揹包的動態規劃實現,可是很明顯效率太低,時間複雜度並沒...

(部落格搬遷)二維多重揹包轉化為01揹包

題意 有n種物品,每件物品的價值為pr i 體積為v i 重量為w i 數量為c i 現有乙個體積為v,最大可承受重量為w的揹包。問 怎麼樣選擇物品,使得揹包中的物品價值最大?分析 這題其實與上一題差不多,思路是一樣的,只是多了一維,相應的記錄陣列也多一維就搞定。仍然是以二進位制的思想來進行優化。不...

HDU 3732(01揹包轉多重揹包)

這道題很有意思,n,c的資料量達到10000,如果用普通的01揹包來做絕對會超時,注意到v和c只有0 10的範圍,這說明有大量的v,c是重複的,相同的v,c的單詞是等價的,這樣就可以轉化為多重揹包來做。不過普通的多重揹包又可能會超時,於是我們採取二進位制優化的方式來優化成01揹包問題。從01揹包到多...