zoukankan      html  css  js  c++  java
  • ACM Greedy Mouse

    Greedy Mouse

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:3
     
    描述

    A fat mouse prepared M pounds of cat food,ready to trade with the cats guarding the warehouse containing his

    favorite food:peanut. The warehouse has N rooms.The ith room containsW[i] pounds of peanut and requires 

    F[i] pounds of cat food. Fatmouse does not have to trade for all the peanut in the room,instead,he may get 

     W[i]*a% pounds of peanut if he pays F[i]*a% pounds of cat food.The mouse is a stupid mouse,so can you tell 

    him the maximum amount of peanut he can obtain.

     
    输入
    The input consists of multiple test cases. Each test case begins with a line containing two non-negative integers M and N. Then N lines follow, each contains two non-negative integers W[i] and F[i] respectively. The test case is terminated by two -1. All integers are not greater than 1000.
    输出
    For each test case, print in a single line a real number accurate up to 3 decimal places, which is the maximum amount of penaut that FatMouse can obtain.
    样例输入
    5 3
    7 2
    4 3
    5 2
    20 3
    25 18
    24 15
    15 10
    -1 -1
    样例输出
    13.333
    31.500
    基本的背包问题,用贪心求解
    #include <iostream>
    #include <algorithm>
    #include <vector>
    #include <cstdio>
    #include <utility>
    using namespace std;
    typedef pair<double,double> W;
    bool cmp(const W& a,const W& b){ return a.first > b.first;}
    int main(){
        double m;
        int n;
        while(cin >>  m >> n && m!=-1 && n!=-1){
            vector<W> exchange(n);
            for(int i = 0 ; i < n; ++ i){
                double w,f;
                cin >>w >>f;
                exchange[i].first = w/f;
                exchange[i].second = w;
            }
            sort(exchange.begin(),exchange.end(), cmp);
            double res = 0;
            for(int i = 0 ; i < n && m; ++i){
                if(m > exchange[i].second/exchange[i].first){
                    res += exchange[i].second;
                    m -= exchange[i].second/exchange[i].first;
                }else{
                    res+=m*exchange[i].first;
                    break;
                }
            }
            printf("%0.3f
    ",res);
        }
    }
    
    
    
     
  • 相关阅读:
    datagridview 批量更新、日期设置、指定列弹出右键菜单
    CAD ObjectARX扩展工具的源码(二)
    ObjextARX-VS2005-字符串转换
    二叉搜索树(二叉查找树)
    贪婪算法-货物装载问题
    Messagebox.Show()常用参数的讨论
    关于矩形排样问题(三)
    单纯形法实现一维管材排料最优化
    [转载]共享一些常用的代码
    转载]取硬盘ID的API实现
  • 原文地址:https://www.cnblogs.com/xiongqiangcs/p/3654410.html
Copyright © 2011-2022 走看看