Problem UVA1354-Mobile Computing

Accept:267  Submit:2232

Time Limit: 3000 mSec

 Problem Description

 Input

 Output

 Sample Input

5
1.3 3
1 2 1
1.4 3
1 2 1
2.0 3
1 2 1
1.59 4
2 1 1 3
1.7143 4
1 2 3 5
 

 Sample Ouput

-1

1.3333333333333335

1.6666666666666667

1.5833333333333335

1.7142857142857142

题解:感觉这个题挺难的。把一个天平看作一棵树,叶子节点是砝码,当确定了这棵树的形状及叶子节点的值之后这个天平的长度就是确定的,思路就来自于此。

下面的事情就是枚举子集,以我目前的能力实现起来确实有困难,参考了lrj的代码,这种二进制枚举子集的方式值得学习。

P.S.0有可能是合法输出,而我一开始设Max = 0.0,当没有更新时输出-1,WAWAWAWAWA......

 #include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std; const int maxn = ;
int n;
double r,sum[<<maxn];
double w[maxn]; struct Tree{
double L,R;
Tree(double L = 0.0,double R = 0.0) :
L(L),R(R) {}
}; vector< vector<Tree> > tree(<<maxn);
bool vis[<<maxn]; void dfs(int subset){
if(vis[subset]) return;
vis[subset] = true;
bool have_child = false;
for(int left = (subset-)&subset;left;left = (left-)&subset){
have_child = true;
int right = subset^left;
double d1 = sum[right]/sum[subset],d2 = sum[left]/sum[subset];
dfs(left),dfs(right);
for(int i = ;i < tree[left].size();i++){
for(int j =;j < tree[right].size();j++){
Tree t;
t.L = max(tree[left][i].L+d1,tree[right][j].L-d2);
t.R = max(tree[right][j].R+d2,tree[left][i].R-d1);
if(t.R+t.L < r) tree[subset].push_back(t);
}
}
}
if(!have_child) tree[subset].push_back(Tree());
} int main()
{
//freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
int iCase;
scanf("%d",&iCase);
while(iCase--){
scanf("%lf%d",&r,&n);
for(int i = ;i < n;i++){
scanf("%lf",&w[i]);
}
memset(vis,false,sizeof(vis));
for(int i = ;i < (<<n);i++){
sum[i] = 0.0;
tree[i].clear();
for(int j = ;j < n;j++){
if(i&(<<j)) sum[i] += w[j];
}
}
int root = (<<n)-;
dfs(root);
double Max = -;
for(int i = ;i < tree[root].size();i++){
Max = max(Max,tree[root][i].L+tree[root][i].R);
}
printf("%.10lf\n",Max);
}
return ;
}

UVA1354-Mobile Computing(二进制枚举子集)的更多相关文章

  1. 紫书 例题 11-3 UVa 1151 (有边集的最小生成树+二进制枚举子集)

    标题指的边集是说这道题的套餐, 是由几条边构成的. 思路是先做一遍最小生成树排除边, 因为如果第一次做没有加入的边, 到后来新加入了很多权值为0的边,这些边肯定排在最前面,然后这条边的前面的那些边肯定 ...

  2. UVA - 1151 Buy or Build (买还是建)(并查集+二进制枚举子集)

    题意:平面上有n个点(1<=n<=1000),你的任务是让所有n个点连通.可以新建边,费用等于两端点欧几里德距离的平方.也可以购买套餐(套餐中的点全部连通).问最小费用. 分析: 1.先将 ...

  3. BZOJ1688|二进制枚举子集| 状态压缩DP

    Disease Manangement 疾病管理 Description Alas! A set of D (1 <= D <= 15) diseases (numbered 1..D) ...

  4. 杭电多校第十场 hdu6435 CSGO 二进制枚举子集

    CSGO Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)Total Subm ...

  5. UVA 1151二进制枚举子集 + 最小生成树

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

  6. 南阳OJ-91-阶乘之和---二进制枚举(入门)

    题目链接:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=91 题目大意: 给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为 ...

  7. hdu1045 Fire Net---二进制枚举子集

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1045 题目大意: 给你一幅n*n的图,再给你一些点,这些点的上下左右不能再放其他点,除非有墙('X') ...

  8. POJ 3279 Fliptile(反转 +二进制枚举)

    Fliptile Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 13631   Accepted: 5027 Descrip ...

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

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

随机推荐

  1. Java_Collections工具类

    Collections 工具类 * Collection与Collections区别 Collection 接口,(大部分集合类的实现接口) Collections 工具类(针对列表) * Colle ...

  2. JSJ——java基本概念二

    当Java虚拟机启动执行时,它会寻找你在命令列所指定的类.每个Java程序最少都会有一个类以及一个main().每个应用程序只有一个main()函数.然后它会锁定像下面这样一个特定的方法: publi ...

  3. angular 时间戳转换(星期过滤器)

    {{(value.time+'000' | date:'yyyy-MM-dd HH:mm:ss') : '/'}} .filter('getWeek', function() { return fun ...

  4. P3275 [SCOI2011]糖果

    题目描述 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配 ...

  5. HDU1521 排列组合(生成函数 背包)

    题意 链接 Sol 可以用生成函数做,也可以用组合数做. 生成函数就是无脑算一下阶乘暴力背包,然后最后再乘上\(M\)的阶乘 组合数的方法就是用类似背包的转移,转移的时候考虑当前放的这几个的方案数即可 ...

  6. Phaser.js之简单的跑酷游戏

    采用的物理引擎是Phaser.js 官网地址:http://phaser.io/ 在这里对此引擎不做过多介绍(因为我也是小白,嘿嘿) 效果展示: 源码(详细源码图片资源可点击文章下方或屏幕右上方的gi ...

  7. mysql中需要注意的编码问题

  8. 小米手机Toast显示带应用名称问题解决方法

    近期为了适配刘海屏,向公司申购了一步小米8的手机,然后测试人员那边测出来一堆适配的问题,其中有一个每一个Toast会显示app的名称+显示的内容,然后网上查找了一下解决方法记录一下,顺便封装了Toas ...

  9. WPF控件库:文字按钮的封装

    需求:封装按钮,按钮上面只显示文字.在鼠标移上去.鼠标点击按钮.以及将按钮设为不可用时按钮的背景色和前景色需要发生变化 实现:继承Button类,封装如下6个属性: #region 依赖属性 /// ...

  10. HDFS客户端的权限错误:Permission denied

    报错:Permission denied: user=root, access=WRITE, inode="hadoop":hadoop:supergroup:rwxr-xr-x ...