何为0-1背包问题?
举个例子,比如我们有物件物品,五件物品分别对应有着自己的重量和价值,此时我们有一个背包,让你去选择随意的装这五件商品,那么我们肯定要选择能最大化利益的一种方法,也就是有限的背包容量,装取最大价值的商品,这也就是0-1背包算法的核心思想。
那么如何去选择这个最优的解?
如图,weight表示物品的重量,value表示物品的价值。
此时的i表示背包的容积,j表示背包所能装下的物体数量。
当i=0时,表示背包所能装的物体为0个,当j等于0时,表示此时背包的容积为0,装不下了。
那么我们便清楚的意识到我们要求的其实就是这张表上最后的这个值。
话不多说,上代码:
//二维数组,非递归
#include <stdio.h>
#include <stdlib.h>
const int N=5;//物品数量
const int S=15;//背包的容量
int tmp1,tmp2;
const int weight[]={
1,2,3,4,5};//N件物品的重量
const int value[]={
1,3,2,4,5};//价格
int main()
{
int dp[N][S];//背包
int Back[N];//用来存放背包中最大价值物品的编号
int tmp1,tmp2,s=S;