C++ 贪心算法部分背包问题

<pre name="code" class="cpp">#include <iostream>
using namespace std;

void swap(float ave[],int s[],int n)
{
	int i,j;
	for(i=0;i<n;i++)
		for(j=i+1;j<n;j++)
			if(ave[s[i]]<=ave[s[j]])
			{
				int temp=s[i];
				s[i]=s[j];
				s[j]=temp;
			}
}
void bag(float w[],float p[],float ave[],int s[],int volume,int n)
{
	int sum=0,i=0;
	for(;i<n;i++)
	{
		if((volume-sum)>=w[s[i]])
		{
			sum+=w[s[i]];
			cout<<"质量为"<<w[s[i]]<<",价值为"<<p[s[i]]<<"的物体提取1件"<<endl;
		}
		else
			break;

	}
	if(sum<volume)
	{
		float j1=(float)(volume-sum)/(float)w[s[i]];
		cout<<"质量为"<<w[s[i]]<<",价值为"<<p[s[i]]<<"的物体提取"<<j1<<"件"<<endl;
	}

}


int main()
{
	int s[20],i;
	float w[20],p[20];
	cout<<"请输入能承受的最大重量:"<<endl;
	int volume;
	cin>>volume;
	cout<<"请输入现有的物体个数:"<<endl;
	int n;
	cin>>n;
	cout<<"请输入各个物体的重量和价值:"<<endl;
	for(i=0;i<n;i++)
		cin>>w[i]>>p[i];
	float ave[20];
	for(int i=0;i<n;i++)
	{
		ave[i]=p[i]/w[i];
	}
	for(i=0;i<n;i++)
		s[i]=i;

	swap(ave,s,n);
	bag(w,p,ave,s,volume,n);
	system("pause");
	return 0;
}
    原文作者:贪心算法
    原文地址: https://blog.csdn.net/mll1208596630/article/details/50358286
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞