题目

分析:枚举子集以及关于该子集的补集,然后用子集去暴力构造一颗二叉树,注意左边的最远距离不一定来自于左子树,右边的最远距离也不一定来自于右子树

  1. #include "iostream"
  2. #include "cstdio"
  3. #include "cstring"
  4. #include "string"
  5. #include "vector"
  6. using namespace std;
  7. const int maxn=;
  8. int T,s,vis[<<maxn];
  9. double r,w[maxn],sum[<<maxn];
  10. struct Tree{
  11. double L,R;
  12. Tree():L(),R(){};
  13. };
  14. vector<Tree> tree[<<maxn];
  15.  
  16. void dfs(int subset){
  17. if(vis[subset]) return;
  18. vis[subset]=;
  19. int flag=;
  20. for(int left=(subset-)&subset;left;left=(left-)&subset){
  21. flag=;
  22. int right=left^subset;
  23. double d1=sum[right]/sum[subset];
  24. double d2=sum[left]/sum[subset];
  25. dfs(left); dfs(right);
  26. for(int i=;i<tree[left].size();i++){
  27. for(int j=;j<tree[right].size();j++){
  28. Tree t;
  29. t.L=max(tree[left][i].L+d1,tree[right][j].L-d2);
  30. t.R=max(tree[left][i].R-d1,tree[right][j].R+d2);
  31. if(t.L+t.R<r) tree[subset].push_back(t);
  32. }
  33. }
  34. }
  35. if(!flag) tree[subset].push_back(Tree());
  36. }
  37. int main()
  38. {
  39. scanf("%d",&T);
  40. while(T--){
  41. scanf("%lf%d",&r,&s);
  42. for(int i=;i<s;i++)
  43. cin>>w[i];
  44. for(int i=;i<<<s;i++){
  45. tree[i].clear();
  46. sum[i]=;
  47. for(int j=;j<s;j++){
  48. if(i&(<<j)){
  49. sum[i]+=w[j];
  50. }
  51. }
  52. }
  53. int root=(<<s)-;
  54. memset(vis,,sizeof(vis));
  55. dfs(root);
  56. double ans=-;
  57. for(int i=;i<tree[root].size();i++)
  58. ans=max(ans,tree[root][i].L+tree[root][i].R);
  59. if(ans==-)
  60. printf("-1\n");
  61. else
  62. printf("%.10lf\n",ans);
  63. }
  64. }

子集枚举好题UVA1354的更多相关文章

  1. poj1873 The Fortified Forest 凸包+枚举 水题

    /* poj1873 The Fortified Forest 凸包+枚举 水题 用小树林的木头给小树林围一个围墙 每棵树都有价值 求消耗价值最低的做法,输出被砍伐的树的编号和剩余的木料 若砍伐价值相 ...

  2. 【最小生成树+子集枚举】Uva1151 Buy or Build

    Description 平面上有n个点(1<=N<=1000),你的任务是让所有n个点连通,为此,你可以新建一些边,费用等于两个端点的欧几里得距离的平方. 另外还有q(0<=q< ...

  3. UVA11825 黑客的攻击 Hackers' Crackdown 状压DP,二进制,子集枚举

    题目链接Click Here [题目描述] 假如你是一个黑客,侵入了一个有着\(n\)台计算机(编号为\(1.2.3....n\))的网络.一共有\(n\)种服务,每台计算机都运行着所有服务.对于每台 ...

  4. HihoCoder#1279 : Rikka with Sequence(dp 枚举子集 二进制 神仙题)

    题意 题目链接 Sol 不愧是dls出的比赛啊,265个交了题的人只有8个有分Orz 做完这题,,感觉自己的位运算dp姿势升华了... 首先最裸的dp应该比较好想,设\(f[i][j][k]\)表示前 ...

  5. BZOJ 1688: Disease Manangement (子集枚举)

    Disease Manangement Q - 枚举子集 Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d &a ...

  6. POJ 2531 Network Saboteur 位运算子集枚举

    题目: http://poj.org/problem?id=2531 这个题虽然是个最大割问题,但是分到dfs里了,因为节点数较少.. 我试着位运算枚举了一下,开始超时了,剪了下枝,1079MS过了. ...

  7. UVA 11825 Hackers’ Crackdown(集合动态规划 子集枚举)

    Hackers’ Crackdown Miracle Corporations has a number of system services running in a distributed com ...

  8. uva 11825 Hackers&#39; Crackdown (状压dp,子集枚举)

    题目链接:uva 11825 题意: 你是一个黑客,侵入了n台计算机(每台计算机有同样的n种服务),对每台计算机,你能够选择终止一项服务,则他与其相邻的这项服务都终止.你的目标是让很多其它的服务瘫痪( ...

  9. uva 11825 巧妙地子集枚举方法

    https://vjudge.net/problem/UVA-11825 题目大意,有n台服务器,有n种服务,每台服务器都运行着所有的服务,一台服务器可以被攻击一次其中的一种服务,当你选择攻击某台服务 ...

随机推荐

  1. CDOJ_844 程序设计竞赛

    原题地址:http://acm.uestc.edu.cn/#/problem/show/844 "你动规无力,图论不稳,数据结构松散,贪心迟钝,没一样像样的,就你还想和我同台竞技,做你的美梦 ...

  2. 简化LINUX的命令输入 简化linux命令 快捷键 短路径

    在LINUX中,有很多常用的命令,常用的命令我们可以熟练的记忆,但是对于不经常使用的命令恐怕是需要翻阅手册了,但是我们可以简化这些命令的输入来达到简便记忆的效果. 这里以BSH为例: 编辑/etc/b ...

  3. python异常捕获异常堆栈输出

    python异常捕获异常堆栈输出 学习了:https://blog.csdn.net/chris_grass/article/details/77927902 import traceback def ...

  4. [Rust] Pass a JavaScript Function to WebAssembly and Invoke it from Rust

    In some cases it’s useful to be able to invoke a JavaScript function inside Rust. This session showc ...

  5. 【HDOJ 5399】Too Simple

    pid=5399">[HDOJ 5399]Too Simple 函数映射问题 给出m函数 里面有0~m个函数未知(-1) 问要求最后1~n分别相应仍映射1~n 有几种函数写法(已给定的 ...

  6. onlyOffice 开发相关 总结

    onlyOffice 服务端 客户端 相关开发整理 功能: 所有客户端都可用 云端部署服务 查看 预览 doc ppt excel 编辑 权限控制 开发技术准备 用户服务器端 提供保存接口 用户浏览器 ...

  7. PHP中的多行字符串传递给JavaScript方法两则

    PHP和JavaScript都是初学.近期有这么个需求: 例如说有一个PHP的多行字符串: $a = <<<EOF thy38 csdn blog EOF; 传递给JavaScrip ...

  8. [leetcode] database解题记录

    175 Combine Two Tables 题目:左连接Person表和Address表. select FirstName,LastName,City,State from Person p le ...

  9. 【DataStructure】Description and Introduction of Tree

    [Description] At ree is a nonlinear data structure that models a hierarchical organization. The char ...

  10. git svn 报错

    删除 openjdk 时 remove 了一大堆软件. 可能由于这个原因导致使用 git svn 命令时出现类似下面的错误. sam@sam-CW65S:pics$ git svn rebase Ca ...