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\n",item[0].name);


    }
    return 0;
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值