简单贪心

可以买一部分的,求最值问题 eg.背包问题

老鼠准备了M磅猫粮,并且准备拿这些猫粮和守卫仓库的猫交换自己最爱的咖啡豆 (JavaBean)。仓库共有N个房间,每个房间里面都有咖啡豆。在第i个房间内有J[i]磅咖啡豆, 但相应地需要付出F[i]磅的猫粮才能进行兑换。但是,老鼠并不一定要兑换该房间内全部的咖 啡豆;相反,如果老鼠支付a%*F[i]的猫粮,那么可以获得a%*J[i]的咖啡豆。现在请你告诉它, M磅猫粮最多可以获得多少咖啡豆

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>

#include <cstdio>

#include <algorithm>

using namespace std;

const int maxn = 1000;

struct javabean {

double weight;

double cost;

};

javabean arr[maxn];

bool compare(javabean x, javabean y) {

return x.weight / x.cost > y.weight / y.cost;

}

int main() {

int m, n; //M磅猫粮 N个房间

while (scanf("%d%d", &m, &n) != EOF) {

if (m == -1 && n == -1) {

break;

}

for (int i = 0; i < n; i++) {

scanf("%lf%lf", &arr[i].weight, &arr[i].cost);

}

sort(arr, arr + n, compare);

double answer = 0;

for (int i = 0; i < n; i++) {

if (m >= arr[i].cost) {

m -= arr[i].cost;

answer += arr[i].weight;

}

else {

answer += arr[i].weight * (m / arr[i].cost);

break;

}

}

printf("%.3f\n", answer);

}

return 0;

}

本章介绍了常常用来求解最优化问题的贪心策略。读者在考场上遇到求最大、最小、最多 等最值问题时,应优先考虑是否能够用贪心策略求解。若问题满足最优子结构性质,即该问题 具备无后效性,那么全局的最优解便可由求子问题的最优解得到。此时就应该选择使用贪心策 略。尽管贪心策略是一种高效实用的方法,但不适合于求解所有的最优化问题。无法通过贪心 策略求解的最优化问题,将在动态规划一章中介绍。

全部评论

相关推荐

02-16 16:17
东北大学 Java
Java抽象带篮子:0基础冲春招可以看看我的置顶帖子[偷笑R]帖子里写了怎么改简历,怎么包装实习经历,还有2个高质量可速成的项目话术,和我的牛客八股笔记专栏
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务