贪心算法背包试做

给定n种物品和一个背包。物品i的重量是Wi,其价值为Vi,
背包的容量为C 应如何选择装入背包的物品 使得装入背包中物品的
总价值最大? 这里,在选择物品i装入背包时,可以选择物品i的一部分,
而不一定要全部装入背包,不能重复装载。
这和老师讲的背包问题很像,按照性价比(价值除以质量),使得单位重量价值增长最快。保证了价值和重量,是最优解。
首先将所有的物品性价比都算出来,接着再排序。
排完序后将性价比高的顺序输出。

#include
#include
using namespace std;
struct good
{
double p;
double w;
double r;
}a[2000];
double s,value,m;
int i,n;
bool bigger(good a,good b)
{
return a.r>b.r;
}
int main()
{
scanf("%d",&n);
for (i=0;i<n;i++)
{
scanf("%lf%lf",&a[i].w,&a[i].p);
a[i].r=a[i].p/a[i].w;
}
sort(a,a+n,bigger);
scanf("%lf",&m);
s=0;
value=0;
for (i=0;i<n&&s+a[i].w<=m;i++)
{
value+=a[i].p;
s+=a[i].w;
}
printf(“The total value in the bag is %.2lf.\n”,value);
return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_44716990/article/details/88767682