贪心

给定一个载重量为M的背包,考虑n个物品,其中第i个物品的重量 ,价值wi (1≤i≤n),要求把物品装满背包,且使背包内的物品价值最大。
有两类背包问题(根据物品是否可以分割),如果物品不可以分割,称为0—1背包问题(动态规划);如果物品可以分割,则称为背包问题(贪心算法)。

下面分享此题的完整代码:

#include<iostream>
#include<algorithm>
using namespace std;
struct bag
{
int w;
int v;
double c;
}a[1001];
int main()
{
int cleft, b = 0, n, m, i, j = 0;
cin >> n;
for (i = 0; i < n; ++i)
{
cin >> a[i].w;
cin >> a[i].v;
a[i].c = a[i].w /a[i]. v;
}
for (i = 0; i < n-1; ++i)
{
if (a[i].c < a[i + 1].c) swap(a[i].c, a[i + 1].c);
}
cin >> m;
cleft = m;
while (j < n&&a[j].w < cleft)
{
cleft -= a[j].w;
b += a[j].v;
j++;
}
if (j < n) b += 1.0*a[j].v*cleft / a[i].w;
cout << b;
return 0;
}
————————————————
版权声明:本文为CSDN博主「学习不易」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43656233/article/details/88543042

posted @ 2022-03-14 17:30  ghgfdsf  阅读(41)  评论(0)    收藏  举报