传送门1(UVa): https://uva.onlinejudge.org/external/13/1354.pdf

传送门2(GOJ): http://acm.gdufe.edu.cn/Problem/read/id/1320

题意: 长度限制 r (1 < r < 10), 给 n (1 <= n <= 6) 个砝码,组成平衡(考虑重量和力臂)的天平,求天平最长能多长。

2015个人选拔赛#6 1004

比赛的时候完全不知道怎么做,比赛完两天重新看一遍有点思路就是敲不出来(弱渣...)=_=

跟着Wenjun师兄的代码学了一下

caodan的是最近在写多重for循环的时候总是在里层写错变量........找半天啊还好几个啊我这是怎么了................

二进制枚举,类似线段树从底层一层一层处理

#include <bits/stdc++.h>
using namespace std; struct Tree{
double l, r;
Tree(double ll = 0.0, double rr = 0.0): l(ll), r(rr) {}
}; const int MAXN = ;
int n;
bool vis[<<MAXN]; // 是否访问过该子集
double r, w[MAXN], sum[<<MAXN];
vector<Tree> tree[<<MAXN]; // 保存各子集符合题意的解 // 计算该子集包含的砝码个数,当为1时相当于到达二叉树结点
int count(int x){
int ans = ;
for(int i = ; i < n; ++i)
if(x & (<<i)) ++ans;
return ans;
} void dfs(int subset){
if(vis[subset]) return ;
vis[subset] = true;
if(count(subset) == ){
tree[subset].push_back(Tree());
return;
} //枚举该集合的所有子集
for(int left = (subset-) & subset; left; left = (left-) & subset){
int right = subset ^ left; //根据公式求当前左右集合对应力臂长度
double leftlen = sum[right] / sum[subset];
double rightlen = sum[left] / sum[subset];
dfs(left); dfs(right); for(int i = ; i < tree[left].size(); ++i){
for(int j = ; j < tree[right].size(); ++j){
double ll = max(tree[left][i].l + leftlen, tree[right][j].l - rightlen);
double rr = max(tree[right][j].r + rightlen, tree[left][i].r - leftlen);
if(ll + rr < r) tree[subset].push_back(Tree(ll, rr));
}
}
}
} int main(){
int t;
scanf("%d", &t);
while(t--){
scanf("%lf %d", &r, &n);
for(int i = ; i < n; ++i) scanf("%lf", &w[i]);
for(int i = ; i < (<<n); ++i){
sum[i] = ;
tree[i].clear();
for(int j = ; j < n; ++j){
if((i>>j) & ) sum[i] += w[j]; //二进制枚举各个子集的重量和
}
}
int root = (<<n) - ; //整个天平
memset(vis, false, sizeof(vis));
dfs(root);
double ans = -;
for(int i = ; i < tree[root].size(); ++i)
ans = max(ans, tree[root][i].l + tree[root][i].r);
if(ans == -) printf("-1\n");
else printf("%.15lf\n", ans);
}
return ;
}

UVa 1354 Mobile Computing | GOJ 1320 不加修饰的天平问题 (例题 7-7)的更多相关文章

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

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

  2. uva 1354 Mobile Computing ——yhx

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5

  3. Uva 1354 Mobile Computing

    题目链接 题意: 在一个宽为r 的房间里, 有s个砝码, 每个天平的一端要么挂砝码, 要么挂另一个天平, 并且每个天平要保持平衡. 求使得所有砝码都放在天平上, 且总宽度不超过房间宽度的最大值. 思路 ...

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

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

  5. UVa 1354 天平难题 Mobile Computing

    整个题考虑起来 最主要要计算的状态 是树的状态 于是要计算出所有可能挂坠可能组成的树的所有形态 tree 用于保存这些状态 考虑不要重复计算,有一个vis 数组 预处理可以先计算出一棵树的重量,简化计 ...

  6. UVa 1354 枚举子集 Mobile Computing

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

  7. 【例题 7-7 UVA - 1354】Mobile Computing

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 秤砣都是在叶子节点. 可以把它看成一个二叉树. 则我们每次只需要选择任意两个"节点",让他们组成一棵二叉树就可以 ...

  8. UVa 536 Tree Recovery | GOJ 1077 Post-order (习题 6-3)

    传送门1: https://uva.onlinejudge.org/external/5/536.pdf 传送门2: http://acm.gdufe.edu.cn/Problem/read/id/1 ...

  9. UVa 1354 天平难题

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

随机推荐

  1. HDU1496 hash

    Equations Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  2. Nginx 防止被域名恶意解析的方法

    今天太倒霉了,发现通过IP无法访问服务器的80端口很无语,昨天都还好的啊,也没有修改过配置,其他端口又是正常的,防火墙也没问题.于是问了下机房,给了个崩溃的回复说我们的服务器有个域名没有备案被电信多次 ...

  3. STURTS2 HELLOWORLD

    4. <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC " ...

  4. 第一百三十三节,JavaScript,封装库--弹出登录框

    JavaScript,封装库--弹出登录框 封装库,增加了两个方法 yuan_su_ju_zhong()方法,将获取到的区块元素居中到页面,chuang_kou_shi_jian()方法,浏览器窗口事 ...

  5. 第六届全球游戏大会( GMGC 北京 2017 )有哪些看点?

    全球游戏大会作为亚太地区极具影响力的全球性游戏行业盛会,本次第六届全球游戏大会( GMGC 北京 2017 )将力邀全球50个国家.500多位业界领袖.5000多家企业.50000多位业界精英参展参会 ...

  6. iOS strong与weak的使用

    strong修饰的属性是强指针类型的,weak修饰的属性是弱指针类型的 ARC对于内存中的对象管理机制,当某个对象没有被强指针指向的时候,该对象就会被销毁. 所以不适当的使用strong和weak修饰 ...

  7. Android Studio利用异步任务AsyncTask发送post请求获取json数据

    syncTask,是Android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主 ...

  8. [MFC美化] Skin++使用详解-使用方法及注意事项

    主要分为以下几个方面: 1.Skin++使用方法 2.使用中注意事项 一. Skin++使用方法 SkinPPWTL.dll.SkinPPWTL.lib.SkinPPWTL.h ,将三个文件及相应皮肤 ...

  9. Saltstack Master 配置文件详解

    #主配置 /etc/salt/master interface 默认值:0.0.0.0(所有的网络地址接口) 绑定到本地的某个网络地址接口 interface: 192.168.30.131 publ ...

  10. MySQL语句相关经验总结

    1. 字段自减 UPDATE `table_name` SET `total`=IF(`total` < 1, 0, `total`-1) WHERE `id` = 1; 一般在做字段减法的时候 ...