zoukankan      html  css  js  c++  java
  • CDZSC_2015寒假新人(1)——基础 C

    Description

    FatMouse prepared M pounds of cat food, ready to trade with the cats guarding the warehouse containing his favorite food, JavaBean.        The warehouse has N rooms. The i-th room contains J[i] pounds of JavaBeans and requires F[i] pounds of cat food. FatMouse does not have to trade for all the JavaBeans in the room, instead, he may get J[i]* a% pounds of JavaBeans if he pays F[i]* a% pounds of cat food. Here a is a real number. Now he is assigning this homework to you: tell him the maximum amount of JavaBeans he can obtain.       
                  

    Input

    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 J[i] and F[i] respectively. The last test case is followed by two -1's. All integers are not greater than 1000.       
                  

    Output

    For each test case, print in a single line a real number accurate up to 3 decimal places, which is the maximum amount of JavaBeans that FatMouse can obtain.       
                  

    Sample Input

    5 3
    7 2
    4 3
    5 2
    20 3
    25 18
    24 15
    15 10
    -1 -1
                  

    Sample Output

    13.333
    31.500
     
    思路:这题大概意思是你要得到多少食物你就要给他多少猫粮。
    用结构体存j,f,s(每磅猫粮可以换得得食物,就是单价)。
    通过s来排序由大到小。
    类似贪心吧。。。。如果给出的猫粮小于剩下的猫粮,则直接
    sum+=stud[i].j;
    m-=stud[i].f;
    否则sum+剩余的猫粮*下一个的单价
     
    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    struct laoshu
    {
        int j;
        int f;
        double s;
    };
    bool cmp(laoshu stud1,laoshu stud2)
    {
        return stud1.s>stud2.s;
    }
    int main()
    {
    #ifdef CDZSC_OFFLINE
        freopen("in.txt","r",stdin);
    #endif
        int i,m,n;
        double sum;
        laoshu stud[1010];
        while(scanf("%d%d",&m,&n)&&m!=-1&&n!=-1)
        {
            sum=0;
            for(i=0; i<n; i++)
            {
                scanf("%d%d",&stud[i].j,&stud[i].f);
                stud[i].s=1.0*stud[i].j/stud[i].f;
            }
            sort(stud,stud+n,cmp);
            for(i=0; i<n; i++)
            {
                if(m>=stud[i].f)
                {
                    sum+=stud[i].j;
                    m-=stud[i].f;
                }
                else
                {
                    sum+=stud[i].s*m;
                    break;
                }
            }
            printf("%.3lf
    ",sum);
        }
        return 0;
    }
  • 相关阅读:
    SGU 176.Flow construction (有上下界的最大流)
    POJ 2391.Ombrophobic Bovines (最大流)
    poj 1087.A Plug for UNIX (最大流)
    poj 1273.PIG (最大流)
    POJ 2112.Optimal Milking (最大流)
    SGU 196.Matrix Multiplication
    SGU 195. New Year Bonus Grant
    关于multicycle path
    ppt做gif动图
    codeforces 598A Tricky Sum
  • 原文地址:https://www.cnblogs.com/Wing0624/p/4243805.html
Copyright © 2011-2022 走看看