1. 程式人生 > >C++_揹包最大可容價值問題

C++_揹包最大可容價值問題

#include <iostream>
#define N 14
using namespace std;
int main()
{
	int i, w[N], s[N],vm[N], C, top, j, vi[N], V=0, Vmax=0, vitop;
	cout<<"請輸入揹包容量"<<endl;
	cin>>C;
	cout<<"請輸入13件物品體積及其價值"<<endl;
	for(i=0;i<N-1;i++)
	{
		cout<<"第"<<i+1<<"件物品的體積為  ";
		cin>>w[i];
		cout<<"價值為  ";
		cin>>vi[i];
		cout<<endl;
	}
	w[6]=0;
	vi[6]=0;
	top=0;
	i=0;
	while(C>=0&&i<N)
	{
		if(C-w[i]>=0&&i<N-1)
		{
			top++;
			s[top]=i;
			C=C-w[i];
			V=V+vi[i];
		}
		if(V>Vmax)
		{
			Vmax=V;
			vitop=top;
			for(j=1;j<=top;j++)
				vm[j]=s[j];
		}
		else
		{
		if(i==N-1&&top>0)
		{
			i=s[top];
			top--;
			C=C+w[i];
			V=V-vi[i];
		}
		}
		i++;
	}
	cout<<"揹包所能容納最大物品價值為  "<<Vmax<<endl<<"其中包含"<<endl;
	for(i=1;i<=vitop;i++)
			{
				j=vm[i];
				cout<<"體積為  "<<w[j]<<"  價值為  "<<vi[j]<<"  的第  "<<j+1<<"  件物品  "<<endl;
			}
	system("pause");
	return 0;
}