#include<iostream.h>
#define max 100 //最多物品数
void sort (int n,float a[max],float b[max]) //按价值密度排序
{
int j,h,k;
float t1,t2,t3,c[max];
for(k=0;k<=n;k++)
c[k]=a[k]/b[k];
for(h=0;h<n;h++)
for(j=0;j<=n-h;j++)
if(c[j]<c[j+1])
{t1=a[j];a[j]=a[j+1];a[j+1]=t1;
t2=b[j];b[j]=b[j+1];b[j+1]=t2;
t3=c[j];c[j]=c[j+1];c[j+1]=t3;
}
}
//---------------------------------
int knapsack(int n,float limitw,float v[max],float w[max],int x[max])
{float c1; //c1为剩余可装载重量
int i;
sort(n,v,w); //物品按价值密度排序
c1=limitw;
for(i=0;i<=n;i++)
{
if(w[i]>c1)break;
x[i]=1; //x[i]为1时,物品i在解中
c1=c1-w[i];
}
return c1;}
//-------------------------------
void main()
{int n,i,x[max],j;
float totalv=0,totalw=0,limitw;
//---赋值----
n=3;
limitw=5;
for(i=0;i<=(n-1);i++)
x[i]=0;
//---赋值---------
float v[3]={7,4,5};
float w[3]={2,3,2};//猫粮
j=knapsack (n,limitw,v,w,x);
cout<<endl<<"the selection is:";
for(i=0;x[i]==1;i++)
{
cout<<endl<<"取出的重量"<<v[i]<<"猫粮"<<w[i]<<"单位价值"<<v[i]/w[i];
totalw=totalw+w[i];
totalv=totalv+v[i];
}
//----------------------
totalv=totalv+j*v[i]/w[i];
cout<<endl<<"取出的重量"<<j*v[i]/w[i]<<"猫粮"<<j<<"单位价值"<<v[i]/w[i];
cout<<endl<<"胖老鼠能换取到的食物的最大数量:"<<totalv<<endl; //背包的总价值
}