• 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;
    }
  • 相关阅读:
    C++使用GDI+实现图片格式转换
    易语言调用C++写的DLL
    【PE】手动给PE文件添加一段代码MessageBoxA
    SHGetSpecialFolderLocation获取开始文件夹
    MySQL导入导出数据
    MySQL5.7修改密码
    Elasticsearch 基于external的乐观锁的版本控制
    Elasticsearch修改字段类型 (_reindex)
    es 迁移数据, 重建索引
    SHELL
  • 原文地址:https://www.cnblogs.com/Wing0624/p/4243805.html
Copyright © 2020-2023  润新知