01背包问题改进算法
- 格式:pdf
- 大小:201.42 KB
- 文档页数:6
0/1背包问题改进算法
改进算法的求解步骤: ① 初始[1]{(0,0)}pn;
② [1][1](,)iiqipiwv;
③ [][1][1]pipiqi ——其中的受控点;
④ 重复②③,直到计算出[1]p;
⑤ 由[1]p的最后一个跳跃点即为所求问题的最优值(1,)mc。
capacity value next p[1]
p[2]
p[3]
p[4]
p[5]
p[6]
int knapsack( int n, int c, int v[], int w[],pointer p[], int x[] )
{ p[1]=(pointer)malloc(sizeof(struct node));
p[1]capacity=-1;
p[1]value=-1;
p[1]next=null;
for( i=2; i<=n+1; i+= )
{ p[i]=(pointer)malloc(sizeof(struct node));
p[i]capacity=-1;
p[i]value=-1;
p[i]next=null; -1
-1
-1
-1
-1
-1 4 6 0 0
q[i]=(pointer)malloc(sizeof(struct node));
q[i]capacity=-1;
q[i]value=-1;
q[i]next=null;
}
s=(pointer)malloc(sizeof(struct node));
scapacity=0;
svalue=0;
snext=null;
p[n+1]next=s; //初始化p[n+1]={(0,0)}
//输出p[n+1]的信息 cout< rp=p[n+1] next; while( rp!=null ) { cout<<”(”<