51nod——1548 欧姆诺姆和糖果
一开始以为是贪心,然后发现没法贪。暴力枚举肯定T,于是用约束关系优化:
假设wr >= wb,
第一种情况:wr >= sqrt (c), 则此时最多吃c / wr个r,且c / wr <= sqrt (c),这样从0到c / wr枚举r的数量即可。为什么不枚举b的数量,因为c/wr更小。这样就获得了一个n <= sqrt (1e9) 的O (n)解法。
第二种情况:wr < sqrt (c),设的wr >= wb自然 wb < sqrt (c),此时如果像上面那样枚举仍然会T,还能想办法再优化吗?比较一下两种糖的快乐重量比,保持r糖更快落(不然就互换值),即hr / wr >= hb / wb,则hr * wb >= hb * wr,这个式子说明了如果吃wr及以上个b,不如吃wb个r,所以从0到wr枚举b的数量即可。此时同样是n < sqrt (1e9) 的O (n)解法。
#include <bits/stdc++.h>
using namespace std;
#define ll long long int main() {
std::ios::sync_with_stdio ();
cin.tie ();
ll c, hr, hb, wr, wb, ans = ;
cin >> c >> hr >> hb >> wr >> wb;
if (wr < wb)
swap (wr, wb), swap (hr, hb); if (wr >= sqrt (c)) { //r最多取c/wr个
for (int i = ; i * wr <= c; i++)
ans = max (ans, i * hr + (c - i * wr) / wb * hb);
} else { //wr、wb都小于sqrt(c)
if (1.0 * hr / wr < 1.0 * hb / wb) //保持r更优
swap (wr, wb), swap (hr, hb); for (int i = ; i < wr; i++)
ans = max (ans, i * hb + (c - i * wb) / wr * hr);
}
cout << ans << endl;
return ;
}
51nod——1548 欧姆诺姆和糖果的更多相关文章
- 51nod 1548 欧姆诺姆和糖果 (制约关系优化枚举)
1548 欧姆诺姆和糖果 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 一天,欧姆诺诺姆来到了朋友家里,他发现了 ...
- 51nod 1554 欧姆诺姆和项链
有一天,欧姆诺姆发现了一串长度为n的宝石串,上面有五颜六色的宝石.他决定摘取前面若干个宝石来做成一个漂亮的项链. 他对漂亮的项链是这样定义的,现在有一条项链S,当S=A+B+A+B+A+...+A+B ...
- 51nod1548 欧姆诺姆和糖果
思路: 只有兩種糖果,枚舉其中一種糖果的數量就可以得到一個可行解: 但總有一種糖果的數量是較少的,並且該數量小於sqrt(C): 簡單證明: 1.若有任一糖果的質量大於sqrt(C),則必定有一糖果的 ...
- 51Nod 1554 欧姆诺姆和项链 (KMP)
题意:中文题. 析:首先要使用KMP的失配函数 f ,对于长度为 i 的串,如果存在循环节那么 i % (i-f[i]) == 0,循环节的长度就是 i - f[i] ,当然次数就是 i / (i- ...
- [codeforces] 526D [51nod] 1554 欧姆诺姆和项链
原题 KMP 方法一: 听说是ex-kmp--来自学姐 ex-kmp是处理两个串s和t之间,t的每一个后缀在s中的最长前缀的长度的一个算法. 它很像manacher(至少我和学姐这么认为),记录了一个 ...
- 51NOD 1554 欧姆诺姆和项链 巧妙利用KMP
请戳这里! #include<cstdio> #define N 1000100 char s[N]; int n,k,nxt[N],ans[N]; int main() { scanf( ...
- 51nod 1554:欧姆诺姆和项链——题解
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1554 题目: 有一天,欧姆诺姆发现了一串长度为n的宝石串,上面有五颜六色 ...
- 51NOD欧姆诺姆和项链——KMP算法(非水题)
>>点击进入原题测试<< 思路:好久不见,今天要开始真正写题了.这个题之前我的理解有点问题,导致写了很久最终都是一直都只能过样例.需要注意的是输出中每一个“1”都是和别的输出相 ...
- KMP、扩展KMP、Manacher习题
照着这篇博客刷一下. 自己也做一下笔记 对于KMP算法,可以看我之前总结的这篇博客 hdu 3613 Best Reward 给一个字符串,字符由a~z构成,每个字符有一个权值.在某一点将字符串切成2 ...
随机推荐
- 利用正则取出Stirng中“”引号内的内容
// 取出所有""中间的内容,正则如下 Pattern pattern1 = Pattern.compile("(?<=\")([\\S]+?)(?=\& ...
- python的编码问题整理
一.编码和解码 1.编码(encode):将人类可以识别的语言(英文.中文等)转化成机器语言(01串)的过程,用于存储. 2.解码(decode):将机器语言转化成人类可识别的语言的过程,用于显示. ...
- Java8 中的 Optional
从 Java 8 引入的一个很有趣的特性是 Optional 类.Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException) —— 每个 Java 程序员都 ...
- ADO.NET 学习链接
在博客园上,这个系列的文章对ADO.NET 总结的很好. ADO.NET 系列文章
- 福昕阅读器把pdf某一页保存出来
第一步: 第二步: 第三步: 第四步:点击保存即可
- [Android]HttpClient和HttpURLConnection的区别
转载:http://blog.csdn.net/guolin_blog/article/details/12452307 最近在研究Volley框架的源码,发现它在HTTP请求的使用上比较有意思,在A ...
- 题解 P1854 花店橱窗布置
把二维压成一维的DP了解一下... 传送门 (以纪念神经兮兮调了两天的一维DP(刷水题谋财害命)以及感谢学长的帮助@ydnhaha) 显然我们有二维的dp:f[i][j]代表第i盆花放到第j个位置 ; ...
- Codeforces Round #432 (Div. 2, based on IndiaHacks Final Round 2017) B
Arpa is taking a geometry exam. Here is the last problem of the exam. You are given three points a, ...
- Python 开发基础-字符串类型讲解(字符串方法)-2
s = 'Hello World!'print(s.index('W',0,9))#返回某个字母的索引值,本例返回6.没有该字母会报错,和FIND比较像,find不会报错,没找到会返回-1print( ...
- js中 前台日期时间使用方法总结
(1)JQuery EasyUI 1.4.2 版本中的 DateTimeBox(时间日期输入框) 参考本地帮助文档. (2)jquery.datetimepicker 单独使用的包 只 ...