分析:背包问题用贪心算法解决,首先就是计算每个物品的性价比(价格/重量),然后进行排序,先装性价比高的物品再依次装入性价比第二、三......高的,如果背包剩余量小于物品的重量,则可以将物品进行拆分,将部分物品装进背包中。
代码如下:
#include<bits/stdc++.h>
using namespace std;
struct node
{
int w,v;//重量,价值
double p;
}a[1005];
int cmp(node a,node b)
{
return a.p>b.p;
}
int main()
{
int n,c;
double ans=0;
cin>>n>>c;
if(n==0 || c==0) return 0;
for(int i=0;i<n;i++)
cin>>a[i].v;
for(int i=0;i<n;i++)
cin>>a[i].w;
for(int i=0;i<n;i++)
a[i].p=(double)a[i].v/a[i].w;//物品的价值比上重量
sort(a,a+n,cmp);
for(int i=0;i<n;i++)
{
if(a[i].w<=c)
{
ans+=a[i].v;
c-=a[i].w;
}
else
{
ans+=a[i].p*c;
break;
}
}
cout<<ans;
}