多重揹包動態規劃及空間優化
題目描述:
有n種物品,第 i 種物品的價值是vai,體積時voi,個每種物品的數量是有限的,為cnti
現有容量為w的揹包,請你放入若干物品,愛總體積不超過w的條件下,使總價值儘可能大
解題思路:
可以按01揹包問題的思路解決,其實01揹包問題就是特殊情況下的多重揹包
可以每次把cnti個物品逐個拆分,轉化為01揹包
狀態轉移方程為:
dp[i][j] = max( dp[i-1][j - vo[i]*k] + va[i]*k , dp[i][j]) 0 <= k <=cnt[i]
#include<stdio.h>
#include<algorithm>
using namespace std;
int va[20],vo[20],cnt[20];
int dp[20][20];
int main()
{
int n , w;
scanf("%d %d",&n , &w);
for(int i = 1; i <= n; i++)
{
scanf("%d %d %d",&va[i],&vo[i],&cnt[i]);
}
for(int i = 1; i <= n; i++)
{
for(int j = 0; j <= w; j++)
{
for(int k = 0; k < cnt[i]; k++)
{
if(j >= vo[i]*k)
{
dp[i][j] = max( dp[i-1][j-vo[i]*k] + va[i]*k , dp[i][j] );//每次將放入一個物品的最大總價值與之前的情況相比取較大的
}
}
}
}
printf("%d",dp[n][w]);
return 0;
}
空間優化程式碼:
#include<stdio.h>
#include<algorithm>
using namespace std;
int va[20] , vo[20] , cnt[20];
int dp[20];
int main()
{
int n , w;
scanf("%d %d",&n , &w);
for(int i = 1 ; i <= n ; i++)
{
scanf("%d %d %d", &va[i] , &vo[i] , &cnt[i]);
}
for(int i = 1 ; i <= n ; i++)
{
for(int j = w ; j >= 0 ; j--)
{
for(int k = 0 ; k <= cnt[i] ; k++)
{
if(j >= vo[i]*k)
{
dp[j] = max(dp[j - vo[i]*k] + va[i]*k , dp[j]);
}
}
}
}
printf("%d",dp[w]);
return 0;
}
相關文章
- 01揹包動態規劃空間優化動態規劃優化
- 【動態規劃】揹包問題動態規劃
- 揹包問題----動態規劃動態規劃
- 動態規劃 01揹包問題動態規劃
- 【動態規劃】01揹包問題動態規劃
- 動態規劃--01揹包問題動態規劃
- 動態規劃篇——揹包問題動態規劃
- 動態規劃-01揹包問題動態規劃
- 【動態規劃】01揹包問題【續】動態規劃
- 演算法-動態規劃-完全揹包演算法動態規劃
- 0-1揹包問題(動態規劃)動態規劃
- 動態規劃之0,1揹包問題動態規劃
- 動態規劃解0-1揹包問題動態規劃
- 動態規劃系列之六01揹包問題動態規劃
- 動態規劃-揹包01問題推理與實踐動態規劃
- 01揹包問題理解動態規劃演算法動態規劃演算法
- 斜率優化動態規劃優化動態規劃
- 01揹包、完全揹包、多重揹包詳解
- 多重揹包問題的單調佇列優化佇列優化
- 詳解動態規劃01揹包問題--JavaScript實現動態規劃JavaScript
- 詳解動態規劃01揹包問題–JavaScript實現動態規劃JavaScript
- 動態規劃之 0-1 揹包問題詳解動態規劃
- 【動態規劃】一次搞定三種揹包問題動態規劃
- 【動態規劃】0-1揹包問題原理和實現動態規劃
- python 動態規劃(揹包問題和最長公共子串)Python動態規劃
- hdu3591The trouble of Xiaoqian 多重揹包+全然揹包
- 區間動態規劃動態規劃
- 005多重揹包問題||
- 運籌優化(七)--動態規劃解析優化動態規劃
- [動態規劃] 區間 dp動態規劃
- javascript演算法基礎之01揹包,完全揹包,多重揹包實現JavaScript演算法
- PHP使用動態規劃實現最優紅包組合PHP動態規劃
- 有關動態規劃的相關優化思想動態規劃優化
- 【BZOJ 5003】與鏈 (多重揹包 dp)
- 深入剖析多重揹包問題(上篇)
- 深入剖析多重揹包問題(下篇)
- 01揹包優先佇列優化佇列優化
- 前端與演算法-動態規劃之01揹包問題淺析與實現前端演算法動態規劃