贪心算法0-1背包问题(算法实验代码)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验三、0-1背包问题(贪心算法)

实验代码:

#include

int max(int a,int b)

{

if(a>b)

return a;

else

return b;

}

void Knapsack(int *v,int *w,int *x,int c,int n, int m[8][100])

{

int i,j;

for(j=0;j

{

if(j

m[n][j]=0;

else

m[n][j]=v[n];

}

for(i=n-1;i>=1;i--)

{

for(j=w[i];j<=c;j++)

m[i][j]=max(m[i+1][j],m[i+1][j-w[i]]+v[i]); }

for(i=1;i

{

if(m[i][c]==m[i+1][c])

x[i]=0;

else

{x[i]=1; c=c-w[i];}

}

x[n]=(m[n][c])?1:0;

return;

}

int main()

{

int i=0;

int n=7;

int w[]={0,2,3,5,7,1,4,1};

int v[]={0,10,5,15,7,6,18,3};

int x[]={0,0,0,0,0,0,0,0};

printf("物品总数为:7\n");

printf("物品重量和价值分别为:\n");

printf("\n重量价值\n");

for (i=1;i<=n;i++)

printf("%d %d \n",w[i],v[i]);

int m=15;

int array[8][100]={0};

Knapsack(v,w,x,m,7,array);

printf("背包能装的最大价值为: %d\n",array[1][m]); printf("贪心算法的解为: ");

for(i=1;i<=n;i++)

{

if(i==1)

printf("%d",x[i]);

else

printf(" %d",x[i]);

}

printf("\n");

return 0;

}

测试截图为:

相关文档
最新文档