#include "stdio.h"
void Knapsack(int n,float M,float v[],float w[],float x[]);
void swap(float *x, float *y)
{
float t = *x;
*x = *y;
*y = t;
}
void selectsort(int n,float v[],float w[]){
for(int i=1;i<=n;i++)
for(int j=i;j<n;j++)
if((v[i]/w[i]) < (v[j]/w[j])){
swap(&v[i],&v[j]);
swap(&w[i],&w[j]);
}
}
void Knapsack(int n,float M,float v[],float w[],float x[])
{
int i;
float sum;
for (i=1;i<=n;i++)
{
x[i]=0;
}
float c=M;
for (i=1;i<=n;i++)
{
if (w[i]>c)
{
break;
}
x[i]=1;
c-=w[i];
sum+=v[i];
}
if (i<=n)
{
x[i]=c/w[i];
sum+=(x[i]*v[i]);
}
printf("背包总价值为:%.1f\n",sum);
}
int main()
{
float M = 20;
float w[] = {0, 15, 18, 10, 9};
float v[] = {0, 300, 180, 150, 270};
int N = sizeof(w) / sizeof(w[0]);
float x[N];
selectsort(N,v,w);
Knapsack(N,M,v,w,x);
return 0;
}