写出0/1背包问题的递归形式的回溯算法

来源:百度知道 编辑:UC知道 时间:2024/07/02 08:12:23
算法分析与设计科目的一道题目
写出0/1背包问题的递归形式的回溯算法

DKNAP(p2,w2,M2,n2)
float p2[],w2[];
float M2;
int n2;
{
int l,h,u,i,j,k,r,next;
int F[10],x[10];
float P[1000],W[1000],pp,ww,PX[10],WX[10],PY[10],c;

F[0]=1;
P[1]=W[1]=0;
l=h=1;
F[1]=next=2;

for (i=1; i<=n2; i++)
{
k=l;
r=l;
while (r<=h)
{
if (W[r]+w2[i]<=M2) r++;
else break;
}
u=r-1;

for (j=1; j<=u; j++)
{
pp=P[j]+p2[i];
ww=W[j]+w2[i];
while (k<=h && W[k]<ww)
{
P[next]=P[k];
W[next]=W[k];
next++;
k++;