UVa 12166 - Equilibrium Mobile
来源:互联网 发布:游戏笔记本电脑知乎 编辑:程序博客网 时间:2024/04/29 10:43
时间限制:3.000秒
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=3318
脑子还是不够灵活,参考了别人的题解才绕过弯来,然后恍然大悟……
给出数个天平,每个天平的结构都类似于二叉树,只有左右重量都相等时才平衡,求每个天平最少改多少个秤砣,也就是叶子结点可以使得整个天平平衡。天平的深度不超过16。
要使得改动的数量最少,那么就至少有一个秤砣不变,然后以这个秤砣为基准来调整整个天平。天平的结构是二叉树,那么由此我们可以得出,如果以深度为d重量为w的秤砣为基准,那么整个天平的重量就是w * pow(2, d),即w << d。
当然,可能会有一些秤砣算出的以各自为基准的天平总重量相同,设天平总重量为sumw,那么这些秤砣的数量就表示了如果使天平的总重量为sumw需要使多少个秤砣保持不变。
基于上面的想法,就可以得到算法了。求出所有可能的sumw值以及其对应的秤砣数量,然后在这些sumw值中找到保持不变的秤砣数量中的最大值,设为maxn,设秤砣总数量为sum。那么sum - maxn即为所求。
为了求出sumw对应的秤砣数量,这里用到了STL里的map结构,设为base,那么base[x]表示使天平的重量为x时保持不变的秤砣的数量。在建树时,每当扫描到叶子结点,即秤砣时,算出对应的sumw值,然后另base[sumw]自增1,这样所有的叶子节点都扫完之后,所有可能的sumw值也就算完了。接下来就只需要遍历一遍,找出最大值即可了。
- UVa 12166 - Equilibrium Mobile
- UVa 12166 - Equilibrium Mobile
- UVa 12166 Equilibrium Mobile
- Uva - 12166 - Equilibrium Mobile
- Uva-12166 Equilibrium Mobile
- UVA - 12166 Equilibrium Mobile
- UVA 12166 Equilibrium Mobile
- UVa 12166 Equilibrium Mobile
- UVa 12166 Equilibrium Mobile
- UVa 12166 - Equilibrium Mobile <二叉树+DFS>
- UVA 12166-Equilibrium Mobile(推导结论)
- UVA 12166 Equilibrium Mobile 修改天平
- [UVa 12166] 修改天平(Equilibrium Mobile)
- Equilibrium Mobile UVA
- 12166 - Equilibrium Mobile
- 12166 - Equilibrium Mobile(DFS)
- Uva-12166-Equilibrium Mobile(逆向思维, map)
- UVA 12166 Equilibrium Mobile (天平性质 + DFS)
- 为 VB.NET 的类增加自定义事件
- ubuntu12.04下apache2+mod_wsgi+django部署配置
- 在arcmap中计算每个要素占总量的百分比
- 关于SIGCHLD信号的处理
- Android奇葩的实现方式之ScrollView嵌套ListView
- UVa 12166 - Equilibrium Mobile
- 浪潮 inspur K-DB 技术白皮书
- android AsyncTask介绍
- Codeforces Round #292 (Div. 2)
- [sig13]Lighting technology of "The Last Of Us"
- Linux进程实践(3) --进程终止与exec函数族
- POJ 3051 Satellite Photographs
- 产品经理如何评估产品机会
- Leetcode:Unique Binary Search Trees: 菜鸟解法