#include<stdio.h>
int n,c,bestp;//物品的个数,背包的容量,最大价值
int p[10000],w[10000],x[10000],bestx[10000];//物品的价值,物品的重量,x[i]暂存物品的选中情况,物品的选中情况
void Backtrack(int i,int cp,int cw)
{ //cw当前包内物品重量,cp当前包内物品价值
int j;
if(i>n)//回溯结束
{
if(cp>bestp)
{
bestp=cp;
for(i=0;i<=n;i++) bestx[i]=x[i];
}
}
else
for(j=0;j<=1;j++)
{
x[i]=j;
if(cw+x[i]*w[i]<=c)
{
cw+=w[i]*x[i];
cp+=p[i]*x[i];
Backtrack(i+1,cp,cw);
cw-=w[i]*x[i];
cp-=p[i]*x[i];
}
}
}
int main()
{
int i;
bestp=0;
printf("请输入背包最大容量:");
scanf("%d",&c);
printf("请输入物品个数:");
scanf("%d",&n);
printf
回溯法之0-1背包问题(C实现)
最新推荐文章于 2022-07-05 09:02:20 发布
本文介绍了使用回溯法解决经典的0-1背包问题,通过C语言实现,详细解析了算法思路,并展示运行效果。
摘要由CSDN通过智能技术生成