P1477 部分背包问题(这个是贪心)

384 阅读1分钟

image.png

image.png

由于每堆金币可以任意拆分,所以这道题其实是个贪心问题而不是背包问题。

先将每组数据按照性价比(自己算!)由大到小排序,

如果当前容量足够则全装,不够就装满。

tip:要注意的是,不够的情况要用剩余容量*当前性价比,性价比是浮点型,整型与浮点型相乘容易出错哦!要进行转换,为了避免错误,可以把相关变量都设置为浮点型!

部分代码:

struct money//用结构体储存每堆金币信息
{
    double m;//重量
    double v;//价值
    double x;//性价比
};

bool cmp(money a, money b){
	return a.x>b.x;
}

int main()
{
    接收
    按性价比排序
    1.容量够就全拿
    2.容量不够就塞满
    输出
	}
    return 0;
}