-
问题描述
-
有一个背包,背包容量是 M =150,有 7 个物品,物品可以分割成任意大小,要求尽可能让装入背包中的物品总价值最大,但不能超过总容量
物品 A B C D E F G 重量 35 30 60 50 40 10 25 价值 10 40 30 50 35 40 30
-
-
问题分析
- 选择性价比最高的,即算出单位价值,并按从大到小排序,依次放入背包,超重就不放,没超就继续放入,直到判断完所有物品
-
代码
#include <iostream>
using namespace std;
void deal(double *value,double *weight,int n);
void sort(double *value,int n);
int main()
{
char name[7] = {'A','B','C','D','E','F','G'};
double W;
cin>>W;
int n;
cin>>n;
double value[n],weight[n];
for(int i = 0;i<n ;i++)
cin>>value[i]>>weight[i];
deal(value,weight,n);
sort(value,n);
int j = 0;
while(j<n)
{
if(W >= weight[j])
W -= weight[j];
cout<<name[j]<<" "<<weight[j]<<endl;
j++;
}
return 0;
}
void deal(double *value,double *weight,int n)
{
for(int i = 0;i<n;i++)
value[i] /= weight[i];
}
void sort(double *value,int n)
{
for(int i = 0;i<n-1;i++)
{
for(int j = 0;j<n-i-1;j++)
{
if(value[j]<value[j+1])
swap(value[j],value[j+1]);
}
}
}
- 结果
- 数据
150
7
35 10
30 40
60 30
50 50
40 35
10 40
25 30
- 数据