C++源码:
#include<iostream>
#include<algorithm>
#include<conio.h>
const int M=10000005;
using namespace std;
struct three{
double w;//每个宝物的重量
double v;//每个宝物的价值
double p;//性价比
}s[M];
bool cmp(three a,three b)
{
return a.p>b.p;//根据宝物的单位价值从大到小排序
}
int main()
{
int n;//表示有n个宝物
double m;//表示毛驴的承载能力
cout<<"请输入宝物的数量n及毛驴的承载能力m"<<endl;
cin>>n>>m;
cout<<"请输入每个宝物的重量及价值,用空格分开"<<endl;
for(int i=0;i<n;i++)
{
cin>>s[i].w>>s[i].v;
s[i].p=s[i].v/s[i].w;//每个宝物的单位价值
}
sort(s,s+n,cmp);
double sum=0.0;//表示贪心运走宝物的价值之和
for(int i=0;i<n;i++)
{
if(m>s[i].w)//表示宝物的重量在毛驴的承载能力之内
{
m-=s[i].w;
sum+=s[i].v;
}
else{
sum+=m*s[i].p;//部分装入
break;
}
}
cout<<"装入宝物的最大价值maximumv value="<<sum<<endl;
getch();
return 0;
}
py