⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 0-1

📁 用VC编写的01背包问题,功能强大,是在老师的指导下完成的,大家可以用来参考
💻
字号:
#include<iostream.h>

int c;	//背包容量
int n;	//物品数
int *w;	//物品重量
int *p;	//物品价值
int cw;	//当前重量
int cp;	//当前价值
int *choose;	//当前装载情况
int bestp;	//最优价值
int *bestc;	//最优装载情况


//回溯
void backtrack(int t)
{
	int i,j;
	if(t>n)
	{
		for(i=1;i<=n;i++)
		{
			cout<<choose[i]<<" ";
		}
		cout<<cw<<" ";
		cout<<cp<<endl;
		if(cp>bestp)
		{
			bestp=cp;
			for(j=1;j<=n;j++)
			{
				bestc[j]=choose[j];
			}
		}
	}
	else
	{
		for(i=0;i<=1;i++)
		{
			if(i==0)
			{
				choose[t]=0;
				backtrack(t+1);
			}
			if(i==1 && cw+w[t]<=c)
			{
				cw+=w[t];
				cp+=p[t];
				choose[t]=1;
				backtrack(t+1);
			}
		}
	}
	cw-=w[t-1]*choose[t-1];
	cp-=p[t-1]*choose[t-1];
}


//贪心,不能解决的问题
void greedy()
{


	int index=1,max=0;
	int *temp;
	temp=new int[n+1];
	for(int i=1;i<=n;i++)
	{
		choose[i]=0;
		cw=0;
		cp=0;
	}
	for(int j=1;j<=n;j++)
	{
		for(i=1;i<=n;i++)
		{
			if(((float)p[j]/w[j])<((float)p[i]/w[i]))
			{
				index++;
			}

		}
		temp[j]=index;
		index=1;
	}
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=n;j++)
		{
			if(temp[j]==i)
			{
				if(w[j]<c)
				{
					choose[j]=1;
					c-=w[j];
					cw+=w[j];
					cp+=p[j];
				}
			}
		}
	}
	
	bestp=cp;
	for(i=1;i<=n;i++)
	{
		bestc[i]=choose[i];
	}
}

int main()
{
	int i;

	cout<<"输入背包容量:";
	cin>>c;
	cout<<"输入物品数:";
	cin>>n;
	w=new int[n+1];
	p=new int[n+1];
	choose=new int[n+1];
	bestc=new int[n+1];
	cout<<"输入各物品重量:";
	for(i=1;i<=n;i++)
	{
		cin>>w[i];
	}
	cout<<"输入各物品价值:";
	for(i=1;i<=n;i++)
	{
		cin>>p[i];
	}

	bestp=0;
	cw=0;
	cp=0;
	backtrack(1);

	cout<<"最优装载:"<<endl;
	for(i=1;i<=n;i++)
	{
		cout<<bestc[i]<<" ";
	}
	cout<<bestp<<endl;
	return 0;
}



输入背包容量:7
输入物品数:4
输入各物品重量:3 5 2 1
输入各物品价值:9 10 7 4
0 0 0 0 0 0
0 0 0 1 1 4
0 0 1 0 2 7
0 0 1 1 3 11
0 1 0 0 5 10
0 1 0 1 6 14
0 1 1 0 7 17
1 0 0 0 3 9
1 0 0 1 4 13
1 0 1 0 5 16
1 0 1 1 6 20
最优装载:
1 0 1 1 20


输入背包容量:10
输入物品数:5
输入各物品重量:2 2 6 5 4
输入各物品价值:6 3 5 4 6
0 0 0 0 0 0 0
0 0 0 0 1 4 6
0 0 0 1 0 5 4
0 0 0 1 1 9 10
0 0 1 0 0 6 5
0 0 1 0 1 10 11
0 1 0 0 0 2 3
0 1 0 0 1 6 9
0 1 0 1 0 7 7
0 1 1 0 0 8 8
1 0 0 0 0 2 6
1 0 0 0 1 6 12
1 0 0 1 0 7 10
1 0 1 0 0 8 11
1 1 0 0 0 4 9
1 1 0 0 1 8 15
1 1 0 1 0 9 13
1 1 1 0 0 10 14
最优装载:
1 1 0 0 1 15

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -