《01背包问题动态规划详解及c代码》由会员分享,可在线阅读,更多相关《01背包问题动态规划详解及c代码(5页珍藏版)》请在人人文库网上搜索。
1、0/1背包问题动态规划详解及 C+弋码1问题描述给定一个载重量为C的背包有n个物品其重量为wi价值为vi 1j第i个物品不装入背包否则 若wiv=j且第i个物品装入背包后的价值ci-1j则记录当前最大 价值替换为第i个物品装入背包后的价值其C+弋码如下#in cludeusing n amespace std;void KANPSACK_DP( int c5050, i nt w50, i nt v50, i nt n, i nt C)for(i nt i = 0; i ci - 1j)cij = vi + ci - 1j - wi;else cij = ci - 1j;else cij = 。
2、ci - 1j;void OUTPUT_SACK(int c5050, int x50, int w50, int n, int C)for(int k = n; k = 2; k -)if(ckC = ck-1C)xk = 0;else xk = 1;C = C - wk;x1 = c1C ? 1 : 0;int mai n()in t c5050;int w50,v50;int x50;int C,n;cout输入物品的总个数;cinn;coutvv输入背包的总容量;cin C;coutvv依次输入物品的重量 wi;3 / 5coutvv依次输入物品的价值 vi;KANPSACK_DP(c, w, v, n, C);OUTPUT_SACK(c, x, w, n, C);coutvv最优解为e ndl;for(i nt i = 1; i = n; i +)coutxivv;coutvve ndlvv最大容量为e ndl;coutvvc n Cve ndl;system(pause); return 0;运行结果如下输入物品的总个数5输入背包的总容量10依次输入物品的重量2 2 6 5 4# / 5依次输入物品的价值6 3 5 4 6最优解为11001最大容量为 15 请按任意键继续.5 / 5。