有n種物品和乙個容量為v的揹包。第i種物品最多有n[i]件可用,每件費用是c[i],價值是w[i]。求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。
狀態轉移方程:f[i][v]=max
此時他面臨的不是01揹包的選與不選的問題,而是從n[i]裡面選多少個的問題。
實現方法:
1:轉化成01揹包,將每種揹包轉換成數量為n[i]的01揹包求解
view code
#include2:利用二進位制的思想(思考中,給出**實現,原理不理解。。)#include
#include
using
namespace std;
#define n 107
#define inf 9999999
int c[n],w[n],f[n],b[n];
int max(int x,int y)
int main()}}
printf("
%d\n
",f[n]);
}return
0;}
view code
#include3:o(n*v)#include
#include
using
namespace std;
const
int max_s = 1007;
int c[max_s],w[max_s],b[max_s],f[max_s];
void zb(int c,int w,int n)
void cb(int c,int w,int n)
}int main()
zb(b[i]*c[i],b[i]*w[i],n);}}
printf("
%d\n
",f[n]);
}return
0;}
view code
#include#include
using
namespace std;
const
int max_s = 107;
int f[100007],w[max_s],b[max_s];
//f[i]來表示當前i**是否出現過,
int sum[100007];//
當**達到i時,最多使用這一種硬幣的次數
int main()}}
cout<
揹包學習 多重揹包揹包
有n種物品和乙個容量為v的揹包。第i種物品最多有n i 件可用,每件費用是c i 價值是w i 求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。狀態轉移方程 f i v max 此時他面臨的不是01揹包的選與不選的問題,而是從n i 裡面選多少個的問題。實現方法 1 轉化...
揹包 01揹包,完全揹包,多重揹包
哈哈 01揹包 f i v max 完全揹包 f i v max 多重揹包 f i v max include include include include include define maxn 1000 using namespace std int n,cap int w maxn 重量 花...
多維多重揹包問題 01揹包,完全揹包,多重揹包
csdn 專業it技術社群 登入 blog.csdn.net有n件物品和乙個容量為v的揹包。第i件物品的費用是w i 價值是v i 求將哪些物品裝入揹包可使價值總和最大。1.1空間優化 這要求在每次主迴圈中我們以 v v 0 的遞減順序計算 f v 這樣才能保證計算 f v 時 f v ci 儲存的...