zoukankan      html  css  js  c++  java
  • HDOJ.1070 Milk(贪心)

    Milk

    点我挑战题目

    题意分析

    每组测试数据给出一系列牛奶商品,分别是牛奶的品牌,价格,以及体积。在读取数据的时候,体积在200以下的牛奶直接忽略掉。并且每天要喝200ML的牛奶。但是无论牛奶体积有多么大,牛奶最多喝5天,也就是说每盒牛奶最多喝1000ml,当牛奶的体积不为200整数倍的时候,多余的直接扔掉不喝。现在编写程序挑选出最便宜的牛奶。
    贪心策略。
    最便宜的就是价钱最低,当然要计算平均某量所花的钱。这个量是平均每体积还是平均每天呢?当然是平均每天。因为如果体积大于1000ml多余的部分是不喝的,尽管单位体积再便宜,实际喝掉的也就是1000ml。当然可以理解为平均有效体积所花的钱。最简单的方法就是每盒牛奶所花的钱/这盒牛奶所能喝的天数,按照升序排列后,输出第一项即可。注意排序时,若价钱相等,则体积大的在前面。

    代码总览

    /*
        Title:HDOJ.1070
        Author:pengwill
        Date:2016-11-24
    */
    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    #define max 110
    using namespace std;
    struct milk{
        char name[max];
        //int price;
        int v;
        int day;
        double rate;
    }item[max];
    bool cmp(milk a, milk b)
    {
        if(a.rate < b.rate){
            return true;
        }else if(a.rate == b.rate){
            if(a.v>b.v){
                return true;
            }else{
                return false;
            }
        }else{
            return false;
        }
    
    }
    
    int main()
    {
        //freopen("in.txt","r",stdin);
        char tname[max];
        int tprice;
        int tv;
        int t,n;
        scanf("%d",&t);
        while(t--){
            scanf("%d",&n);
            int i;
            for(i = 0;i<n;i++){
               scanf("%s %d %d",tname,&tprice,&tv);
                    //item[i].price = tprice;
                    if(tv<200){
                        n--;
                        i--;
                        continue;
                    }else if(tv>=1000){
                        strcpy(item[i].name,tname);
                        item[i].v = tv;
                        item[i].day = 5;
                        item[i].rate = 1.0 * tprice / 5;
                       // break;
                    }else {
                        strcpy(item[i].name,tname);
                        item[i].v = tv;
                        item[i].day = tv / 200;
                        item[i].rate = 1.0 * tprice / item[i].day;
                       // break;
                    }
    
                //}
            }
            sort(item,item+n,cmp);
            printf("%s
    ",item[0].name);
    
    
        }
        return 0;
    }
    
  • 相关阅读:
    curl库使用文件传输
    linux 命令
    第三方库交叉编译
    指针越界
    GetWindowRect GetClientRect
    libevent
    C#关闭窗体
    C# log日志窗口
    C++同一时刻仅允许一个实例,包含多用户的场景。
    C# 引用类型
  • 原文地址:https://www.cnblogs.com/pengwill/p/7367208.html
Copyright © 2011-2022 走看看