zoukankan      html  css  js  c++  java
  • 1548 欧姆诺姆和糖果

    一天,欧姆诺诺姆来到了朋友家里,他发现了许多糖果。有蓝色和红色两种。他知道每颗红色糖果重Wr克,每颗蓝色糖果重Wb克。吃一颗蓝色糖果会给他带来Hb的欢乐值,吃一颗红色糖果会给他带来Hr的欢乐值。

    欧姆诺姆最多只能吃C克的糖果,而且每一颗糖果不能只吃一半。现在他想通过吃蓝色和红色的糖果来获得最大的欢乐值。

    样例解释:每一种糖果吃两颗即可。

    Input
    单组测试数据。
    输入占一行有四个整数C,Hr,Hb,Wr,Wb (1≤C,Hr,Hb,Wr,Wb≤10^9).
    Output
    输出最大可能获得的欢乐值。
    Input示例
    样例输入1
    10 3 5 2 3
    Output示例
    样例输出1
    16

    假设 wr > wb
      若wr > sqrt(c),那么红色糖果最多可取 c/wr颗,c/wr < 0,枚举取红色糖果的数目即可
      若wr < sqrt(c):
          假设hr/wr > hb/wb,那么hr*wb > hb*wr,也就是说若吃wr颗蓝色糖果,不如吃wb颗红色糖果,所以吃的蓝色糖果数量不应超过wr颗,否则一定可以被吃wb颗红色糖果所替代
          枚举,吃蓝色糖果的数量即可,最多吃wr颗,且wr<sqrt(c)

    #include<stdio.h>
    #include<math.h>
    #include<string.h>
    #include<iostream>
    #include<algorithm>
    #define MAXSIZE 100005
    #define LL long long
    #define INF 0x3f3f3f3f
    
    using namespace std;
    
    int main()
    {
        LL c,hr,hb,wr,wb,lr,lb,ans=0;
        scanf("%lld%lld%lld%lld%lld",&c,&hr,&hb,&wr,&wb);
        if(wr < wb)
        {
            swap(wr,wb);
            swap(hr,hb);
        }
        if(wr >= sqrt(c))
        {
            for(int i=0;i*wr<=c;i++)
            {
                ans = max(ans,i*hr + (c-i*wr)/wb*hb);
            }
        }
        else
        {
            if((1.0*hr)/(1.0*wr) <= (1.0*hb)/(1.0*wb))
            {
                swap(wr,wb);
                swap(hr,hb);
            }
            for(int i=0;i<wr;i++)
            {
                if(i*wb > c)
                    break;
                ans = max(ans,i*hb + (c-i*wb)/wr*hr);
            }
        }
        printf("%lld
    ",ans);
        return 0;
    }
    View Code
  • 相关阅读:
    414. Third Maximum Number 第三大的数字
    java 正则表达式
    将含有逻辑运算符的字符串解析为逻辑符号
    ora-01830:日期格式图片在转换整个输入字符串之前结束
    mysql的字符拼接
    oracle执行计划详解
    oracle获取执行计划及优缺点 详解
    kmp算法中的nextval实例解释
    kmp算法中的next数组实例解释
    哈夫曼实例解释(哈夫曼编码)
  • 原文地址:https://www.cnblogs.com/alan-W/p/9016547.html
Copyright © 2011-2022 走看看