阿里巴巴背包问题贪心算法

物品课分割的装载问题称为背包问题,物品不可分割的装载问题称为0-1背包问题。

#include<iostream>
#include<algorithm>
using namespace std;
//按性价比贪心策略
typedef struct three {
	double w; //重量
	double v; //价值
	double p; //性价比
	three(double wi, double vi, double pi)
	{
		w = wi;
		v = vi;
		p = pi;
	}
	three() 
	{

	}
}three;
bool cmp(three t1, three t2)
{
	return t1.p > t2.p;
}
int main()
{
	int m;//限制重量
	int n; //货物种类
	cout << "输入最多能装的重量以及货物的种类:" << endl;
	cin >> m >> n;
	three* t = new three[n];//总共多少种货物
	cout << "开始输入货物:" << endl;
	for (int i = 0; i < n; i++)
	{
		cin >> t[i].w >> t[i].v;
		t[i].p = t[i].v / t[i].w;
	}
	sort(t, t + n, cmp);
	double sum=0,rev=m; //能装价值总和,剩余重量总和
	for (int i = 0; i < n; i++)
	{
		cout << "货物:" << t[i].w << endl;
		if (rev >= t[i].w)
		{
			rev -= t[i].w;	
			sum += t[i].v;
		}
		else 
		{
			sum += (t[i].p*rev);
			break;
		}
	}
	cout << "最多能得到价值为:" << sum << endl;
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JustEasyCode

谢谢您

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值