• 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);
        }
    }
    
    
    
     
  • 相关阅读:
    Kubernetes——Pod对象的声明周期(Pod的相位、创建过程、重要行为、探测、重启策略、终止过程)
    多表查询
    七种JOINS SQL
    k8s创建server报错x509: certificate has expired or is not yet valid
    dockercompose安装etcd
    树莓派3B ssh配置
    系统集成项目管理工程师2022年上半年下午案例分析题及答案
    信息系统项目管理师2022年上半年下午案例分析题及答案
    UE4笔记RHI相关
    Civil 3d 几何空间点重新编号
  • 原文地址:https://www.cnblogs.com/xiongqiangcs/p/3654410.html
Copyright © 2020-2023  润新知