贪心算法- 杭电OJ 1009 FatMouse' Trade
2014-03-16 11:13
351 查看
这学期开始学算法,讲到了贪心。贪心算法的基本思想就是并不是从整体角度出发,而是做出在当前看来最好的选择,做出的选择只是局部最优选择,虽然不能得到整体最优解,但最后结果是最优解的一个近似解,即用局部最优“代替”全局最优。当然光听老师讲,再看看书是没用,要实际敲出代码才能得到锻炼,于是我找了杭电上的一个题目来作为贪心算法的实际练习。
1009 - FatMouse' Trade
题目大意:有M个猫的食物,要去仓库中用这些猫食换自己的食物,仓库有N个房间,每个房间对应一个换算比例,即用多少猫食换多少自己的食物,求出最多能换多少自己的食物。
分析:每个房间对应一个J(自己需要的食物)和F(猫食),要想换更多的食物,那自己所用的猫食就得越少,即J和F的比值越大的那个房间,能换到的食物越多,所以需要按这个比值将房间排序,然后逐个换取就得到了最大能换到的食物,这里贪心的思想体现为:总是从当前能换到的最多的食物的那个房间开始换,即找到局部最优解。
这里用到了C++中的排序函数sort,并自定义了比较函数cmp用来比较J和F的比值.
AC代码如下:
1009 - FatMouse' Trade
题目大意:有M个猫的食物,要去仓库中用这些猫食换自己的食物,仓库有N个房间,每个房间对应一个换算比例,即用多少猫食换多少自己的食物,求出最多能换多少自己的食物。
分析:每个房间对应一个J(自己需要的食物)和F(猫食),要想换更多的食物,那自己所用的猫食就得越少,即J和F的比值越大的那个房间,能换到的食物越多,所以需要按这个比值将房间排序,然后逐个换取就得到了最大能换到的食物,这里贪心的思想体现为:总是从当前能换到的最多的食物的那个房间开始换,即找到局部最优解。
这里用到了C++中的排序函数sort,并自定义了比较函数cmp用来比较J和F的比值.
AC代码如下:
#include <iostream> #include <algorithm> #include <iomanip> using namespace std; struct JF { double J; double F; }; bool cmp(const JF& T1, const JF& T2) { return (T1.J / T1.F) > (T2.J / T2.F);//按比例排序 } int main() { int m, n; double sum; JF Fat[1000]; while (cin >> m >> n && m != -1 && n != -1) { sum = 0; for (int i = 0; i < n; ++i) { cin >> Fat[i].J >> Fat[i].F; } sort(Fat,Fat + n,cmp); for (int i = 0; i < n && m > 0; ++i) { if (m < Fat[i].F) { sum += m * (Fat[i].J / Fat[i].F);//若不够当前房间全部换取额,则按比例能换多少换多少 m = 0; } else { sum += Fat[i].J; m -= Fat[i].F; } } cout << fixed << setprecision(3) << sum << endl; } return 0; }
相关文章推荐
- 杭电OJ ——1009——FatMouse' Trade
- 杭电OJ1009 FatMouse' Trade
- 杭电acm 1009 FatMouse' Trade 比较典型的贪心问题
- HDOJ 1009 FatMouse' Trade 贪心算法
- 杭电1009 FatMouse' Trade
- FatMouse' Trade(杭电1009)
- 杭电1009 FatMouse' Trade
- 杭电1009-FatMouse' Trade(贪心)
- 杭电ACM 1009 FatMouse' Trade
- 杭电1009--FatMouse' Trade
- 杭电 acm 1009 FatMouse' Trade
- 杭电(1009)FatMouse' Trade (贪心)
- 杭电OJ(HDU)-ACMSteps-Chapter Three-《FatMouse' Trade》《今年暑假不AC》《排名》《开门人和关门人》
- 杭电1009 FatMouse' Trade(贪心)
- 15HD_OJ——FatMouse' Trade (贪心算法)
- 杭电 1009 FatMouse' Trade
- 杭电 ACM 1009 FatMouse' Trade
- 杭电ACM 1009:FatMouse' Trade
- FatMouse' Trade(杭电1009)
- hdu-1009 FatMouse' Trade(贪心算法)