1548 欧姆诺姆和糖果 51NOD
来源:互联网 发布:淘宝视频要求 编辑:程序博客网 时间:2024/05/29 03:36
一天,欧姆诺诺姆来到了朋友家里,他发现了许多糖果。有蓝色和红色两种。他知道每颗红色糖果重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
从高质量糖果或低质量糖果选0个开始枚举,那么为什么枚举到sqrt(c)个呢?
假如高质量糖果或低质量糖果质量其中之一大于sqrt(c),那么显然相应的数量肯定小于 sqrt(c)
如果两者质量都小于sqrt(c),那么两者质量最小公倍数T一定小于C,当低质量较小者(m1)数量(sum1)超过sqrt(c)时,那一定能将取质量高m2数量sum1/m2,因为质量相同情况下取m2更优,也就是说只要m1数量超过sqrt(c),那么一定能取若干数量m2来取代m1会更优。(自己瞎几把想的,希望有人有更好更严格的证明求教)。
#include<bits/stdc++.h>using namespace std;int main(){ long long c,hr,hb,wr,wb; while(cin>>c>>hr>>hb>>wr>>wb) { long long ans=-1; for(long long i=0;i*i<=c;i++) { if(i*wr<=c) ans=max(ans,i*hr+(c-i*wr)/wb*hb); if(i*wb<=c) ans=max(ans,i*hb+(c-i*wb)/wr*hr); } cout<<ans<<endl; }}
1 0
- 51NOD 1548 欧姆诺姆和糖果
- 51nod 1548 欧姆诺姆和糖果
- 【51nod】1548 欧姆诺姆和糖果
- 51Nod-1548-欧姆诺姆和糖果
- 51nod-1548:欧姆诺姆和糖果
- 1548 欧姆诺姆和糖果 51NOD
- 51nod 1548 欧姆诺姆和糖果 (思维 枚举)
- 51nod 1548 欧姆诺姆和糖果
- 515nod 1548 欧姆诺姆和糖果 【枚举】
- 51nod 1548 欧姆诺姆和糖果【思维+分类讨论】
- 51 nod 1548 欧姆诺姆和糖果(背包思维暴力写)@
- 51nod 1548欧姆诺姆和糖果(枚举优化)
- 欧姆诺姆和糖果
- 51Nod-1554-欧姆诺姆和项链
- 51NOD 1554 欧姆诺姆和项链 【kmp】
- 51nod1548-枚举&技巧&数学证明-欧姆诺姆和糖果
- 51nod卷积和
- P3793礼物和糖果
- View
- iOS UIPageControl使用
- 一、BIO、NIO、AIO通信机制理解
- nginx源码分析--内存池
- 移动窗口
- 1548 欧姆诺姆和糖果 51NOD
- tcl安装与学习
- 工业大数据漫谈8:工业大数据的采集
- spark 2.0 metrics example of spark sink -- JmxSink
- 图片圆角实现
- Android ScrollView中的ListView只显示一个条目问题
- alter system flush buffer_cache
- Xamarin XAML语言教程Xamarin.Forms中改变活动指示器颜色
- 动手写一个"liveReload"