0-1背包问题-动态规划
一、问题描述

给定n种物品和一个背包。物品i 的重量是 w_i ,其价值是v_i ,背包的容量为c 。问应如何选择装入背包中的物品,使得装入背包中物品的总价值最大?
0-1背包问题
在选择装入背包中物品时,对每种物品 i 只有两种选择:装入 、 不装入 。 即不能将物品 i 多次装入背包,也不能只装物品 i 的一部分。
背包问题
在选择装入背包中的物品时,对每种物品 i 只有三种选择:装入、不装入、部分装入。
二、数学模型描述
三、最优子结构性质
四、逻辑递推式

五、代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
void Knapsack(int v[], int w[], int c ,int n , int **m){ for(int i = 1 ; i <= n ; i ++ ){ for(int j = 0 ; j <= C ; j ++ ){ m[i][j] = m[i-1][j] ; if( j >= w[i] ){ m[i][j] = max(m[i-1][j-w[i]] + v[i] , m[i-1][j] ); } } } return m[n][c] ; }
void Trace(int v[], int w[], int c, int n , int **m){ }
|