混合揹包
描述乙個旅行者有乙個最多能裝v公斤的揹包,現在有n件物品,它們的重量分別是w_1,w_2,…,w_n,它們的價值分別為c_1,c_2,…,c_n。有的物品只可以取一次(01揹包),有的物品可以取無限次(完全揹包),有的物品可以取的次數有乙個上限(多重揹包)。求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。
輸入第一行:二個整數,m(揹包容量,m≤200),n(物品數量,n≤30);
第2…n+1行:每行三個整數wi,ci,pi,前兩個整數分別表示每個物品的重量,價值,第三個整數若為0,則說明此物品可以購買無數件,若為其他數字,則為此物品可購買的最多件數(pi)。
輸出僅一行,乙個數,表示最大總價值。
輸入樣例 1
10 3
2 1 0
3 3 1
4 5 4
輸出樣例 1
11
提示**樣例說明
選第一件物品1件和第三件物品2件。
一本通這個題混合了多種揹包,(01揹包,完全揹包,多重揹包),但方法不變。
for(int i=1;i<=m;i++)
}
for(int i=1;i<=n;i++)
}else
}} }
基本機構就是這樣,(裡面含多重揹包)。
標程:
#includeusing namespace std;
int w[1000],v[1000],p[1000],dp[1000][1000];
int main()
} for(int i=1;i<=n;i++)
}else
}} }
cout
}
揹包九講 之 混合揹包思路題解
問題重述 有 n 種物品和乙個容量是 v 的揹包。物品一共有三類 第一類物品只能用1次 01揹包 第二類物品可以用無限次 完全揹包 第三類物品最多只能用 si 次 多重揹包 每種體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使物品體積總和不超過揹包容量,且價值總和最大。輸出最大價值。輸入格式...
題解 hdu3535 混合揹包
題目鏈結 思路摘抄自大佬部落格 首先如果存在最優解,我們可以互換不同工作集合的處理順序,依然能得到最優解.那麼我們下面只需要處理每個單獨的工作集合即可.令dp i j x表示處理完前i組工作集,所花時間 j時的快樂值為x。每得到一組工作就進行一次dp,所以dp i 為第i組的結果。下面對三種情況進行...
混合揹包 分組揹包
啥是混合揹包呢,就是包含01揹包,完全揹包,多重揹包。有n件物品,揹包承重最大為m,w i 代表重量,v i 代表價值,s i 代表種類。s i 1,可用1次,s i 0,可用無限次,s i 0,可用s i 次.解法 見 const int maxn 1e4 5 int n,m,dp m 1 w n...