题意:

分析:

其实刚看到这题的时候觉得很难, 以至于结束了第七章然后去做了一遍第六章树的部分。现在再做这题觉得思路并不是太难,因为总共就只有六个结点,那么只要枚举二叉树然后算出天平然后再从叶子往上推就能得出这棵树的宽度。这题我觉得主要难点是如何去枚举二叉树,其实这就是回溯法的核心。先去dfs选这个作为结点的, 然后还原, 再做不选的dfs, 这样就能没有遗漏(但会有重复)地枚举二叉树了。

这题还有个细节是一个天平中,左子树的右长度可能会超过天平右臂 + 右子树的长度, 如下图

那么就不能单纯地看右臂+右子树的长度了, 要取一个最大值作为这个天平的最右, 反过来的左边也是一样的。

 #include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
struct Tree{
double L, R;
Tree(int _L = , int _R = ):L(_L), R(_R){}
};
Tree tree[<<];
int w[<<], vis[<<]; int n, ind;
double room, maxw; int dfs(int dep){
if(dep == n - ){// 递归边界
if(tree[ind].L + tree[ind].R <= room)
maxw = max(maxw, tree[ind].L + tree[ind].R);
}
for(int i = ; i <= ind; i++){
if(!vis[i]){
for(int j = ; j <= ind; j++){
if(i != j && !vis[j]){ vis[i] = vis[j] = ;//建树
w[++ind] = w[i] + w[j]; int wl = w[i], wr = w[j];
// a | b
// ----------
// | |
// wl wr double a = (double)wr/(wl + wr);
double b = 1.0 - a; tree[ind].R = max(b + tree[j].R, tree[i].R - a);//比较着取最大值,
tree[ind].L = max(a + tree[i].L, tree[j].L - b); dfs(dep + ); vis[i] = vis[j] = vis[ind] = ;//还原
tree[ind].R = tree[ind].L = ;
--ind;
}
}
}
}
}
int main(){
int T;
scanf("%d", &T);
while(T--){
memset(tree,,sizeof(tree));
ind = ;//秤砣数组下标
scanf("%lf", &room);
scanf("%d", &n);
for(int i = ; i <= n;i++){
scanf("%d", &w[i]);
ind++;
}
maxw = -;
memset(vis,,sizeof(vis));
dfs();
if(maxw == -)
printf("-1\n");
else
printf("%.16f\n", maxw);
}
return ;
}

最新文章

  1. tomcat相关问题
  2. AIX RAC ORA-27504 ORA-27300 ORA-27301 ORA-27302 ORA-27303
  3. Javasocket1
  4. lght oj 1257 - Farthest Nodes in a Tree (II) (树dp)
  5. FreeMarker语法2
  6. 【转】(DT系列四)驱动加载中, 如何取得device tree中的属性
  7. SilkTest高级进阶系列8 – 放下榔头,立地成佛
  8. c# 抽象类,抽象方法使用(abstract)
  9. 深入理解Java虚拟机读书笔记4----虚拟机类加载机制
  10. linux 命令 — sed
  11. IdentityServer4中Code/Token/IdToken对应可访问的资源(api/identity)
  12. HTML 页面的 批量删除的按钮
  13. RocketMQ msgId生成算法
  14. spring cloud: Hystrix(五):如禁止单个FeignClient使用hystrix
  15. Spring cloud(2)B Eureka 注册微服务到服务中心
  16. IntelliJ IDEA2018.1、2017.3激活
  17. asp.net 定时执行任务代码 定时采集数据
  18. VIM 使用心得
  19. Win7网络修复,winsock/tcpip
  20. Observer(观察者)

热门文章

  1. mysql架构解析
  2. python之操作mysql(一)
  3. AtCoder Grand Contest 008 D - K-th K
  4. 1051 - Good or Bad DFS 记忆化搜索
  5. RHEL6.5---LVS(IP-TUN)
  6. 使用ant build build.xml报“includeantruntime was not set”警告及&quot;Class not found: javac1.8&quot;问题
  7. 001.JS特效
  8. 初识node,原理与浏览器何其相似
  9. Tcl介绍和基础语法
  10. SPI总线小结