整个题考虑起来 最主要要计算的状态 是树的状态 于是要计算出所有可能挂坠可能组成的树的所有形态 tree 用于保存这些状态 

考虑不要重复计算,有一个vis 数组 

预处理可以先计算出一棵树的重量,简化计算

#include<stdio.h>
#include<iostream>
#include<vector>
#include<algorithm> using namespace std;
const int maxn=6;
int w[6];//各个重量
int sum[1<<maxn]; //储存在i集合树的情况下总重量
int n,s;
double r;
int vis[1<<maxn];//探究当前组成的树是否被构造过 struct Tree{
double r,l;
Tree(): r(0),l(0){
}
};
vector<Tree>tree[1<<maxn];//下标的树组成的全部可能形态
void dfs(int root){ //计算以root 组成一棵树的所有可能形态,并标记已记录
if(vis[root])return;
vis[root]=true;
bool ok=false;
for(int left=root&(root-1);left;left=(left-1)&root){
int right=left^root;
ok=true;
dfs(left);
dfs(right);
double d1=(sum[left]*1.0)/(sum[root]*1.0);
double d2=(sum[right]*1.0)/(sum[root]*1.0);
for(int i=0;i<tree[left].size();i++){
for(int j=0;j<tree[right].size();j++){
Tree t;
t.l=max(tree[left][i].l+d1,tree[right][j].l-d2);
t.r=max(tree[left][i].r-d2,tree[right][j].r+d2);
if(t.l+t.r<r)tree[root].push_back(t);
}
}
}
if(!ok)tree[root].push_back(Tree());//如果当前树只有一个挂坠,那么这是一个空树
}
int main()
{
freopen("t.in","r",stdin);
freopen("t.out","w",stdout);
cin>>n;
while(n--){
cin>>r>>s;
for(int i=0;i<s;i++){
cin>>w[i]; }
for(int i=0;i< 1<<s;i++){
vis[i]=false;
tree[i].clear();
sum[i]=0;
for(int j=0;j<s;j++){
if(i&(1<<j))sum[i]+=w[j];
}
}//存储重量的预处理 利用一个二进制数存储了所有的信息;
int root=(1<<s)-1;
dfs(root);
long double ans=-1;
for(int i=0;i<tree[root].size();i++){
if(tree[root][i].l+tree[root][i].r>ans)ans=tree[root][i].l+tree[root][i].r;
}
cout<<ans<<endl;
}
}  

UVa 1354 天平难题 Mobile Computing的更多相关文章

  1. UVa 1354 天平难题

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

  2. UVa 1354 枚举子集 Mobile Computing

    只要枚举左右两个子天平砝码的集合,我们就能算出左右两个悬挂点到根悬挂点的距离. 但是题中要求找尽量宽的天平但是不能超过房间的宽度,想不到要怎样记录结果. 参考别人代码,用了一个结构体的vector,保 ...

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

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

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

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

  5. UVA.839 Not so Mobile ( 二叉树 DFS)

    UVA.839 Not so Mobile ( 二叉树 DFS) 题意分析 给出一份天平,判断天平是否平衡. 一开始使用的是保存每个节点,节点存储着两边的质量和距离,但是一直是Runtime erro ...

  6. UVa 839 -- Not so Mobile(树的递归输入)

    UVa 839 Not so Mobile(树的递归输入) 判断一个树状天平是否平衡,每个测试样例每行4个数 wl,dl,wr,dr,当wl*dl=wr*dr时,视为这个天平平衡,当wl或wr等于0是 ...

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

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

  8. UVa 1354 Mobile Computing | GOJ 1320 不加修饰的天平问题 (例题 7-7)

    传送门1(UVa): https://uva.onlinejudge.org/external/13/1354.pdf 传送门2(GOJ): http://acm.gdufe.edu.cn/Probl ...

  9. uva 1354 Mobile Computing ——yhx

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5

随机推荐

  1. Unity UI on the HoloLens

    Following the steps under "Required configuration" will allow Unity UI to continue to work ...

  2. 怎么打开sql server 数据库日志文件

    To Open Log File Viewer, 1. Expand Server Node > 2. Expand SQL Server Agent > 3. Expand Jobs & ...

  3. JS设计模式--简单工厂模式

    在JS中创建对象会习惯的使用new关键字和类构造函数(也是可以用对象字面量). 工厂模式就是一种有助于消除两个类依赖性的模式. 工厂模式分为简单工厂模式和复杂工厂模式,这篇主要讲简单工厂模式. 简单工 ...

  4. 【原创翻译】初识Unity中的Compute Shader

    一直以来都想试着自己翻译一些东西,现在发现翻译真的很不容易,如果你直接把作者的原文按照英文的思维翻译过来,你会发现中国人读起来很是别扭,但是如果你想完全利用中国人的语言方式来翻译,又怕自己理解的不到位 ...

  5. mac 10.9 安装 gevent

    安装步骤: Gevent依赖libevent和greenlet,需要分别安装. 1,安装 macport (如已安装,可以跳过) 2,通过终端 键入: sudo port install libeve ...

  6. flex acionscript png图片去除多余空白,生成合适大小图片

    //最小矩形(非透明最小区域) public static function getMinRect(target:BitmapData):Rectangle{   return target.getC ...

  7. windows python文件拷贝到linux上执行问题

    之前在Windows下写好了一个Python脚本,运行没问题,今天在Linux下,脚本开头的注释行已经指明了解释器的路径,也用chmod给了执行权限,但就是不能直接运行脚本. 1 问题1: 报错:: ...

  8. 4、IMS

    链:1:http://www.cnblogs.com/gnuhpc/archive/2012/12/11/2813494.html [笔记] 1.<计算机网络(第五版)>P10-15:电路 ...

  9. Map小结

    Map主要用于存储健值对个人理解:因为Map是根据键得到值,因此需要保证键值的唯一性,不允许键重复(重复了覆盖了),但允许值重复.1.HashMap根据键的HashCode 值存储数据,根据键可以直接 ...

  10. 带有静态方法的类(java中的math类)

    带有静态方法的类通常(虽然不一定是这样)不打算被初始化. 可以用私有构造函数来限制非抽象类被初始化. 例如,java中的math类.它让构造函数标记为私有,所以你无法创建Math的实例.但Math类却 ...