原题:https://uva.onlinejudge.org/external/13/1354.pdf

有s块石头,每块都被一根绳子吊着,如果有两个及以上的石头,需要平衡的天平把所有的石头挂起来。

房间的宽度为r,问小于房间宽度r的天平的最大宽度。


分析: 是个回溯枚举的问题,枚举中途如果发现当前宽度已经大于r,回溯。

难点: 也可以说是亮点,就是枚举所有的二叉树,一个天平可以看成是一个二叉树。

具体点说递归建立二叉树的过程就是每次从包含所有节点的集合中选择两个节点,合二为一

所以我们建树的过程是先确定叶子节点,再合并生成父节点。

因为我们建立的二叉树的特点就是所有叶子节点是我们要挂的石头,所有父节点都是一个天平

细节:这题有个特别坑的细节,卡了我wa好久,就是二叉树的右节点可能会和左节点重叠

并且有可能右节点的左杠杆长度大于左节点的做杠杆长度,反之亦然。

上图

所以在生成父节点计算左右天平总长度的时候需要考虑上述特殊情况

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = ;
int n, idx, f[MAXN], w[MAXN];
double r, ans, rw[MAXN], lw[MAXN]; void build_binary_tree(int dep) {
if (dep == n) return;
for (int i = ; i < MAXN; i++) if (f[i])
for (int j = ; j < MAXN; j++) if (i != j && f[j]) {
double L = max(lw[i], lw[j] - ), R = max(rw[i] - , rw[j]);
if ( + L + R < r) {
if (dep == n - ) ans = max( + L + R, ans);
f[i] = f[j] = ;
int id = idx++;
f[id] = ;
w[id] = w[i] + w[j];
lw[id] = w[j] * 1.0 / w[id] + L;
rw[id] = w[i] * 1.0 / w[id] + R;
build_binary_tree(dep + );
f[--idx] = ;
f[i] = f[j] = ;
}
}
} int main() {
int T;
scanf("%d", &T);
while (T--) {
scanf("%lf%d", &r, &n);
ans = -; idx = ;
memset(f, , sizeof(f));
memset(rw, 0.0, sizeof(rw));
memset(lw, 0.0, sizeof(lw));
for (int i = ; i < n; i++) {
scanf("%d", &w[i]);
f[idx++] = ;
}
if (n == ) {printf("0.0000000000\n"); continue;}
build_binary_tree();
printf("%.10lf\n", ans);
}
return ;
}

Mobile Computing-天平难题-Uva1354(回溯枚举二叉树)的更多相关文章

  1. uva1354 天平难题 【位枚举子集】||【huffman树】

    题目链接:https://vjudge.net/contest/210334#problem/G 转载于:https://blog.csdn.net/todobe/article/details/54 ...

  2. UVa 1354 天平难题 (枚举二叉树)

    题意: 分析: 其实刚看到这题的时候觉得很难, 以至于结束了第七章然后去做了一遍第六章树的部分.现在再做这题觉得思路并不是太难,因为总共就只有六个结点,那么只要枚举二叉树然后算出天平然后再从叶子往上推 ...

  3. uva1354 枚举二叉树

    这题很难,这几天一直在想这题,最后看了汝佳大哥的代码才明白.贴上代码 // UVa1354 Mobile Computing // Rujia Liu #include<cstdio> # ...

  4. UVa 1354 Mobile Computing[暴力枚举]

    **1354 Mobile Computing** There is a mysterious planet called Yaen, whose space is 2-dimensional. Th ...

  5. uva 1354 Mobile Computing ——yhx

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5

  6. Uva 1354 Mobile Computing

    题目链接 题意: 在一个宽为r 的房间里, 有s个砝码, 每个天平的一端要么挂砝码, 要么挂另一个天平, 并且每个天平要保持平衡. 求使得所有砝码都放在天平上, 且总宽度不超过房间宽度的最大值. 思路 ...

  7. UVa 1354 天平难题

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  8. Mobile Computing: the Next Decade论文 cloudlet薄云

    1 Introduction “Information at your fingertips anywhere, anytime” has been the driving vision of mob ...

  9. UVa 1354 天平难题 Mobile Computing

    整个题考虑起来 最主要要计算的状态 是树的状态 于是要计算出所有可能挂坠可能组成的树的所有形态 tree 用于保存这些状态 考虑不要重复计算,有一个vis 数组 预处理可以先计算出一棵树的重量,简化计 ...

随机推荐

  1. java String对象的创建(jvm).

    本人目前也开始学习虚拟机,在java中,有很多种类型的虚拟机,其中就以sum公司(当然现在已经是oracle了)的虚拟机为例,介绍可能在面试的时候用到的,同时对自己了解String有很大帮助,这里仅仅 ...

  2. 段落排版--中文字间距、字母间距(letter-spacing, word-spacing)

    中文字间隔.字母间隔设置: 如果想在网页排版中设置文字间隔或者字母间隔就可以使用    letter-spacing 来实现,如下面代码: h1{ letter-spacing:50px; } ... ...

  3. Java Swing 使用总结(转载)

    随笔转载自:此去经年ぢ 地址:http://www.cnblogs.com/FLFL/p/5369756.html 1.     GUI编程引言 以前的学习当中,我们都使用的是命令交互方式: 例如:在 ...

  4. hdoj 2602(背包)

    Problem D Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Sub ...

  5. MVC埰坑日记 文件权限

    public static void DownLoadFile(string FileFullPath) { if (!string.IsNullOrEmpty(FileFullPath) & ...

  6. MySQL Procedure(MySQL存储过程)[转]

    ------Creating Stored Procedures in MySQL------ --Make sure you have version 5 of MySQL:   SELECT VE ...

  7. prototype/constructor/__proto__之prototype

    1任何对象都有__proto__属性 属性值Object2并不是所有对象都有prototype属性.只有方法对象(构造函数)以及基本数据类型还有Array,有prototype属性;并且所有方法(对象 ...

  8. [Windows] php开发工具,zendstudio13使用方法补丁

    官网原版下载 http://downloads.zend.com/studio ... win32.win32.x86.exe 破解补丁: 链接:http://pan.baidu.com/s/1gdi ...

  9. vsftpd.conf 联机手册

    vsftpd.conf - vsftpd 的配置文件 描述vsftpd.conf 可以用于控制 vsftpd, 以实现各种各样的功能. vsftpd 缺省到 /etc/vsftpd.conf 处查找此 ...

  10. smali文件语法参考

    Dalvik opcodes Author: Gabor Paller Vx values in the table denote a Dalvik register. Depending on th ...