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

📄 main.cpp

📁 0-1背包问题
💻 CPP
字号:
#include <iostream.h>
#include <math.h>
#include <malloc.h>
#define MAXCOUNT 100
#define MAXWEIGTH 200
int c[MAXCOUNT][MAXWEIGTH];
/********************************************************************************************************************************
0-1背包问题 Version 1.0
2008-10-28
********************************************************************************************************************************/
//计算背包能装进物品的最大价值
void knapsack(int v[],int w[],int t,int len)
{
	int n = len;
	int jMin = (w[n]-1>=t)?t:w[n]-1;//= min(w[n]-1,t);


	for (int j=0;j<=jMin;j++)
	{
		c[n][j] = 0;
	}
	for (int jLarger=w[n]; jLarger<=t; jLarger++ )
	{
		c[n][jLarger] = v[n];
	}

	
    for (int i=n-1; i>1;i--)
    {
	
		jMin = (w[i]-1>=t)?t:w[i]-1;
		for (int k1=0 ; k1<=jMin;k1++)
		{
			c[i][k1] = c[i+1][k1];
		}
		for (int k2=w[i]; k2<=t;k2++)
		{
			c[i][k2] = (c[i+1][k2]>= c[i+1][k2-w[i]]+v[i])?c[i+1][k2]:c[i+1][k2-w[i]]+v[i];
		}
    }

	c[1][t] = c[2][t];
	if (t>=w[1])
	{
		c[1][t] = (c[1][t]>=c[2][t-w[1]]+v[1])?c[2][t]:c[2][t-w[1]]+v[1];
	}
	cout<<"背包能容纳物品的最大价值是: ";
    cout<<c[1][t]<<endl;
}

//查找背包是否被装入
void trace(int w[], int t,int x[],int len)
{
	cout<<"最优装载物品的结果:(0—表示不装入,1—表示装入):"<<endl;
	for (int i=1;i<len;i++)
	{
		if (c[i][t]==c[i+1][t])
		{
			x[i] = 0;
		}
		else {
			x[i] = 1;
			t-=w[i];
		}
		cout<<x[i]<<" ";
	}
	x[len]=(c[len][t]>0)?1:0;
	cout<<x[len]<<endl;
}

void main()
{

    int count = 0;
	int W = 0;
	cout<<"请输入背包的容量(整数且小于200):";
	cin>>W;

	cout<<"请输入物品的个数(整数且小于200):";
	cin>>count;

	int *v =(int *)malloc((count+1)*sizeof(int));
	int *w =(int *)malloc((count+1)*sizeof(int));
	int *x =(int *)malloc((count+1)*sizeof(int));
	
	cout<<"请输入"<<count<<"个物品的重量:"<<endl;
	for (int j=1;j<=count;j++)
	{
		cin>>w[j];
	}
//	cout<<endl;

    cout<<"请输入"<<count<<"个物品的价值: "<<endl;
	for (int j1=1;j1<=count;j1++)
	{
		cin>>v[j1];
	}
	cout<<endl;
	
    knapsack(v,w,W,count);
    trace(w,W,x,count);
}

⌨️ 快捷键说明

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