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);
        }
    }
    
    
    
     
  • 相关阅读:
    OpenStack对象存储管理手册(5) OpenStack对象存储系统管理3
    hdu1568Fibonacci
    智能手机中显示信号强度格数
    上篇日本人经营之道 一破坏对手的情绪乱其方寸
    基于Wince的计算器程序
    shell 字符串操作
    轻松记住大端小端的含义
    如何把手机变成你的救生设备
    PM是一个事实
    mysql 5.6 online ddl 测试
  • 原文地址:https://www.cnblogs.com/xiongqiangcs/p/3654410.html
Copyright © 2011-2022 走看看