hdu 1009 FatMouse' Trade

来源:互联网 发布:韩服lol账号购买淘宝 编辑:程序博客网 时间:2024/04/30 05:20

初次接触贪心算法,于是找了hdu 1009  FatMouse' Trade这一道水题。

开始交了两次,都得了WA,仔细看了看才知道是忽略了保留三位小数这一要求。改了之后就成功AC了。

代码:

#include <iostream>using namespace std;struct Room{    double value;    double punds;    double catfood;};int main(){    double M, N;    Room room[1000] = { 0 };    double J[1000] = { 0 };    double F[1000] = { 0 };    double sum = 0;    int i = 0;    while (cin >> M >> N){        sum = 0;        if (M == -1 && N == -1)            break;        for (i = 0; i < N; i++){            cin >> J[i] >> F[i];            room[i].value = F[i] / J[i];            room[i].punds = J[i];            room[i].catfood = F[i];        }        double t;        int j;        for (i = N-1; i > 0; i--)            for (j = i-1; j >= 0; j--)                if (room[i].value  < room[j].value){                    t = room[j].value;                    room[j].value = room[i].value;                    room[i].value = t;                    t = room[j].punds;                    room[j].punds = room[i].punds;                    room[i].punds = t;                    t = room[j].catfood;                    room[j].catfood = room[i].catfood;                    room[i].catfood = t;                }        /*        Room t;        for (i = 0; i < N; i++)            for (int j = i + 1; j < N; j++)  //奇怪,若将此处的j<N换成i<N,会使得N为0                if(room[i].value > room[j].value ){                    t.catfood = room[i].catfood;                    t.punds = room[i].punds;                    t.value = room[i].value;                    room[i].catfood = room[j].catfood;                    room[i].punds = room[j].punds;                    room[i].value = room[j].value;                    room[j].catfood = t.catfood;                    room[j].punds = t.punds;                    room[j].value = t.value;                }        */        i = 0;        while (i<N && M){            if (M > room[i].catfood){                M = M - room[i].catfood;                sum = sum + room[i].punds;                }            else{                sum = sum + M / room[i].value;                M = 0;            }            i++;        }        cout.precision(3);        cout.setf(ios::fixed);//控制使出数据为三位小数        cout<<sum << endl;    }        //system("pause");    return 0;}
个人总结:贪心算法的核心是以局部最优为基础,以求达到全局最优。或者说,达到了全局最优,就极大的满足局部最优。
记忆:控制小数的位数
cout.precision(n);        cout.setf(ios::fixed);

0 0
原创粉丝点击