現在假設你一共有資金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揹包到多...