JZOJ 100023 【NOIP2016提高A组模拟7.6】塔
来源:互联网 发布:淘宝客优惠券链接转换 编辑:程序博客网 时间:2024/06/06 07:27
题目大意:
小A想搭一个体积不超过m的塔,他有各种大小的立方积木,比如边长为a的积木,体积为a^3,现在小A需要你给一个X,每次小A会用一个体积不超过X的最大积木,依次到搭好为止,现在他想最大化积木的个数,同时在积木个数最大的情况下使X最大。
1<=n<=10^15
吹水:
不能确定这题是什么算法,姑且算它为分治吧,感觉质量挺高的,没有做过类似的题。
题解:
设
对于一个f(m),设a=
有一结论:肯定只有总体积第一个选的是边长为a或(a - 1)才可能是最优的。为什么呢?
第一个选a,
选(a-1),
如果选(a - 2),
显然
也就是说,选(a - 2)的后面所包括的范围被选(a - 1)的完美覆盖,注意f的定义。
所以选(a - 2)的是一定小于等于选(a - 1)的。
按这个做,采用递归即可。
时间复杂度:一层就变成了
Code:
#include<cmath>#include<cstdio>#define ll long long#define fo(i, x, y) for(int i = x; i <= y; i ++)#define max(a, b) ((a) > (b) ? (a) : (b))using namespace std;ll n;void dg(ll n, ll &cnt, ll &sum) { if(n == 1) { cnt = sum = 1; return; } if(n == 0) { cnt = sum = 0; return; } ll a1, a2, b1, b2, a = pow(n, 0.33333333333333333); dg(n - a * a * a, a1, a2); dg(a * a * a - 1 - (a - 1) * (a - 1) * (a - 1), b1, b2); if(a1 >= b1) cnt = a1 + 1, sum = a2 + a * a * a; else cnt = b1 + 1, sum = b2 + (a - 1) * (a - 1) * (a - 1);}int main() { scanf("%lld", &n); ll a, b; dg(n, a, b); printf("%lld %lld", a, b);}
阅读全文
0 0
- JZOJ 100023 【NOIP2016提高A组模拟7.6】塔
- JZOJ 100024. 【NOIP2016提高A组模拟7.6】数球
- JZOJ 4628 立方体【NOIP2016提高A组模拟7.15】
- JZOJ 4629 修路【NOIP2016提高A组模拟7.15】
- JZOJ 4630 计数【NOIP2016提高A组模拟7.15】
- JZOJ 4603 颜料大乱斗【NOIP2016提高A组模拟7.15】
- JZOJ 4647 寻找 【NOIP2016提高A组模拟7.17】
- JZOJ.4692【NOIP2016提高A组模拟8.14】传送带
- JZOJ.4699【NOIP2016提高A组模拟8.15】Password
- JZOJ 4699 Password【NOIP2016提高A组模拟8.15】
- JZOJ.4701【NOIP2016提高A组模拟8.15】Throw
- [JZOJ 4699][CF583C]【NOIP2016提高A组模拟8.15】Password
- JZOJ.4710【NOIP2016提高A组模拟8.17】Value
- JZOJ 4709 Matrix【NOIP2016提高A组模拟8.17】
- [Jzoj 4709]. 【NOIP2016提高A组模拟8.17】Matrix
- JZOJ 4710 Value【NOIP2016提高A组模拟8.17】
- JZOJ.4709【NOIP2016提高A组模拟8.17】Matrix
- JZOJ 4711. 【NOIP2016提高A组模拟8.17】Binary
- Java基础-----数组
- HDU 5536 Chip Factory (暴力 或者 01Trie)
- MongoDB常用命令汇总之Collection聚集集合和用户相关。
- 交换两个整数的值
- C++中的引用问题
- JZOJ 100023 【NOIP2016提高A组模拟7.6】塔
- 程序员“错误日志”之break、continue、return
- 2016年湖南省第十二届大学生计算机程序设计竞赛(重现)
- 2017.7.5 模拟赛
- C++ cant appear in a constant-expression bug修复
- elasticsearch bulk 批量加载索引的实例
- 2018秋招-阿里内推编程题
- 文章标题
- scanf()是怎么接受数据的