**One, 0-1 knapsack problem**

Input: The number of items in the first row N, the second line of backpack quality m, then the n row each row gives each item weight and value, each item only one.

Output: Maximum value the backpack can achieve

Sample input:

5 10

1 5

2 4

3 3

4 2

5 1

Sample output:

14

In the process of dynamic planning, you need to reverse the order, because if not reverse

When the i=0

f[0]=0;

F[1]=max (f[1],f[1-w[0]]+v[0]) = 5;

F[2]=max (f[2],f[2-w[0]]+v[0]) = 10;

F[3]=max (f[3],f[3-w[0]]+v[0]) = 15;

....

F[10]=max (f[10],f[10-w[0]]+v[0]) =50

Obviously not, because each item has only one, and the sequential traversal may use the case where the first item in the previous state has been placed

#include <iostream>#include<cstring>using namespacestd;intn,m,f[1111],w[1111],v[1111];//The total capacity of the M backpack, the volume of v items, the value of W itemsvoidOnezeropack (intMintVintW//0-1 Backpack{ for(inti=m;i>=v;i--) F[i]=max (f[i],f[i-v]+w);}intMain () { while(cin>>n>>m) { for(intI=0; i<n;i++) Cin>>v[i]>>W[i]; Memset (F,0,sizeof(f)); for(intI=0; i<n;i++) Onezeropack (M,v[i],w[i]); cout<<f[m]<<Endl; } return 0;}

If you need to fully fill, then initialize the array, only f[0]=0 the rest of the assignment-∞

**Second, complete knapsack problem**

Input: The number of items in the first row N, the second line of backpack quality m, then the n row per row gives the weight and value of each item, each item has an unlimited number of.

Output: Maximum value the backpack can achieve

Sample input:

5 10

1 5

2 4

7 ·

4 2

5 1

Sample output:

50

If each infinite number of that should be sequential traversal, explained above ...

Code: Just change that on the basis above.

for (int i=0; i<n;i++) for (int j=w[i];j<=m;j++) f[j]=max (F[j],f[j-w[i]]+v[i]);

**Three, multiple backpack**

Similar to a full backpack, there are num[i]+1 strategies for each item: 0 pieces, 1 pieces, 2 pieces ... num[i] pieces, there is a state transition equation: f[i][v] = Max{f[i−1][v−k∗ci] + k∗wi |0≤k≤mi}

Complexity is O (vσmi)

Binary optimization time complexity O (VNLOGM)

can be converted to 0-1 knapsack problem directly solved, the complexity is still O (vσmi). But we can reduce the complexity of time by optimizing the binary idea. The item I is divided into several items, each of which has a factor, and the cost and value of the item are the original cost and value multiplied by this factor. Make these coefficients 1,2,4,...,2^ (k-1), n[i]-2^k+1, and K is the largest integer that satisfies the n[i]-2^k+1>0. For example, if N[i] is 13, the items are divided into four items with coefficients of 1,2,4,6 respectively.

Original title Link: http://acm.hdu.edu.cn/showproblem.php?pid=2844

Problem Solving Report: http://www.cnblogs.com/asuml/p/5730400.html

**Four, mixed three kinds of backpack**

Very well understood to enclose the pseudo-code directly:

For I=0 to N-1

If I is 0-1 backpack

Onezeropack (int m,int v,int W)

Else If I is a full backpack

Completepack (int m,int v,int W)

Else

Multiplepack (int m,int v,int w,int num)

**Backpack for five or two-dimensional fee**

Add one dimension to the one-dimensional state corresponding to the cost.

Three-dimensional transfer equation: f[i,v,u] = Max{f[i−1,v,u],f[i−1,v−ci,u−di] + Wi}

Two-dimensional transfer equation: F[v,u]=max{f[v,u],f[v−ci,u−di] + Wi}

**Six, the knapsack problem of the group**

1. Problem

There are n items and a backpack with a capacity of V. The cost of article I is CI, the value is WI. These items are divided into K-groups, each of which conflicts with each other, with a maximum of one item selected. The solution of which items are loaded into the backpack allows the sum of the costs of these items to be no more than the backpack capacity and the maximum value.

2. Transfer equation:

F[K,V] = Max{f[k−1,v],f[k−1,v−ci] + Wi |item i∈group k}

3. Pseudo-code:

For K=1 to K

For V=v to 0

For all I belong to Group K

F[v]=max{f[v],f[v-c[i]]+a[i]

Original title Link: http://acm.hdu.edu.cn/showproblem.php?pid=1712

Problem Solving Report: http://www.cnblogs.com/asuml/p/5732073.html

"Backpack problem" 0-1 backpack, full backpack, multi-pack, mixed three kinds of backpack, two-bit cost backpack, group backpack