题目

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

  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. Adobe Premiere Pro导入插件开发遇到的一个问题

    最近在更新公司一款Premiere Pro CC导入插件的时候,遇到了一个神奇的现象.具体的现象是这样的:我们的插件需要将一些私有的文件数据放到插件中,比如说当前活动的文件名.当插件中收到不同的sel ...

  2. CODEVS 1245 最小的N个和 堆+排序

    原题链接 http://codevs.cn/problem/1245/ 题目描述 Description 有两个长度为 N 的序列 A 和 B,在 A 和 B 中各任取一个数可以得到 N^2 个和,求 ...

  3. express---express-session axios

    express---express-session axios 使用axios访问后台获取session中的属性值为undefined 在main.js中导入axios import axios fr ...

  4. MFC中的双缓冲技术(解决绘图闪烁问题)

    转自 MFC绘图不闪烁——双缓冲技术[转] 在VC/MFC用CDC绘图时,频繁的刷新,屏幕会出现闪烁的现象,CPU时间占用率相当高,绘图效率极低,很容易出现程序崩溃. 所谓双缓冲技术,下面是百度百科的 ...

  5. 【kotlin】kotlin中List中添加List怎么操作

    如题,List集合添加一个List集合怎么操作 如上,现在有了List<A>,A类中有个字段List<B>, 新创建一个List<B>,想把LIst<A> ...

  6. iOS WKWebView添加网页加载进度条(转)

    一.效果展示 WKWebProgressViewDemo.gif 二.主要步骤 1.添加UIProgressView属性 @property (nonatomic, strong) WKWebView ...

  7. BUPT复试专题—日期(2013)

    题目描述 请你计算出第年月日是第X年的第几天.其中,1月1日是第一天,1月2日是第二天,以此类推. 计算时请注意闰年的影响.对于非整百年,年数能整除4是闰年,否则不是闰年:对于整百年,年数能整除400 ...

  8. PS 如何使用液化工具给人物减肥

    进入"液化", 有个收缩按钮, 可以选择范围大小, 想瘦哪里, 瘦多少都OK   最终效果图     1.打开原图,进入通道面板,选择菜单图像计算,计算红色通道,保留人物见图.   ...

  9. postgres启动过程分析

    今天来学习一下pg启动的过程. pg的启动命令./bin/postgres -D path/to/data. 1.主体监控进程 postmaster进程进入无限循环,等待客户端请求并为之提供请求的服务 ...

  10. error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token

    头文件函数声明少了“:(分号)”