#include<iostream>
using namespace std;
void Sort(int n, float v[], float w[], int x[])
{
float b[100];
for (int i = 1; i <= n; i++)x[i] = i;
for (int i = 1; i <=n; i++)
{
b[i] = v[i] / w[i];//算出每个物品单位重量的价值
}
for (int i = 1; i <=n; i++)
{
for (int j = 1; j <= n-i+1; j++)
{
if (b[j] < b[j +1])
{
float temp = b[j]; b[j] = b[j+1 ]; b[j +1] = temp;//按照单位重量价值从大到小排序
float temp2 = w[j]; w[j] = w[j +1]; w[j+1 ] = temp2;//把单位价值大的排在前面
int temp1 = x[j]; x[j] = x[j+1]; x[j+1 ] = temp1;//排序后记录物品的原位置
}
}
}
}
void pack(int n, float m, float v[], float w[], int x[])
{
Sort(n, v, w, x);//将物品的重量按照单位价值的大小排序
float c[100];
int i;
for ( i = 1; i <= n; i++)c[i] = i;
for ( i = 1; i <= n; i++)
{
if (w[i] > m)break;
int a = x[i];//a记录物品的原位置
c[a] = 0;//作为选择后的标记 0代表选择 1代表没选
m -= w[i];
}
if (i <= n)c[x[i]] = m / w[i];
cout << "物品的选择是:(" << " ";
for (int i = 1; i <= n; i++)
{
if (c[i] == 0)
cout << 1 << " ";
else if (c[i] > 0 && c[i] < 1)
cout << c[i] << " ";
else
cout << 0 << " ";
}
cout << ")";
}
int main()
{
int n, m;
cout << "请输入物品的个数:";
cin >> n;
cout << "请输入背包的容量:";
cin >> m;
float w[100], v[100];
int x[100];
cout << "请分别输入物品的重量:";
for (int i = 1; i <= n; i++)
{
cin >> w[i];
}
cout << "请分别输入物品的价值:";
for (int i = 1; i <= n; i++)
{
cin >> v[i];
}
pack(n, m, v, w, x);
system("pause");
return 0;
}