传送门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. Cloudera Manager 5.9 和 CDH 5.9 离线安装指南及个人采坑填坑记

    公司的CDH早就装好了,一直想自己装一个玩玩,最近组了台电脑,笔记本就淘汰下来了,加上之前的,一共3台,就在X宝上买了CPU和内存升级了下笔记本,就自己组了个集群. 话说,好想去捡垃圾,捡台8核16线 ...

  2. LightOJ 1030 Discovering Gold

    期望,$dp$. 设$ans[i]$为$i$为起点,到终点$n$获得的期望金币值.$ans[i]=(ans[i+1]+ans[i+2]+ans[i+3]+ans[i+4]+ans[i+5]+ans[i ...

  3. C++继承、多态、虚函数

    #答案:http://www.cnblogs.com/tinaluo/articles/6290994.html 1 编写程序:定义一个抽象基类sharpe,只有包含一个求面积的纯虚函数,派生出矩形类 ...

  4. struts2框架学习(二)

    ---恢复内容开始--- 一.搭建步奏 1.新建web项目,进行必备Jar包的拷贝,放到lib目录以便项目的引用. 2.拷贝框架的核心配置文件Struts.xml,放到src目录下,保留一个基本配置即 ...

  5. FragmentPagerAdapter和FragmentStatePagerAdapter区别?

    FragmentPagerAdapter:对于不再需要的fragment,选择调用detach方法,仅销毁视图,并不会销毁fragment实例.FragmentStatePagerAdapter:会销 ...

  6. STM32驱动ht1621b显示LCD

    这几天在写ht1621b显示LCD的程序,主芯片是Stm32f10的芯片.对于stm32和ht1621b的运用和操作本人是新手,属于赶鸭子上架,通过查看datasheet等资料和网上查看前人写的程序终 ...

  7. NGINX----源码阅读----(option配置脚本)

    /auto/options options文件主要负责nginx启动前配置脚本对环境变量初始化. 1.默认为环境变量赋值 help=no NGX_PREFIX= NGX_SBIN_PATH= NGX_ ...

  8. DiskGenius(磁盘分区/数据恢复) 32位 V4.9.1 免费绿色版

    软件名称: DiskGenius(磁盘分区/数据恢复) 32位 软件语言: 简体中文 授权方式: 免费软件 运行环境: Win 32位/64位 软件大小: 19.5MB 图片预览: 软件简介: Dis ...

  9. matlab中选择图片路径

    %读取训练图片数据文件 [FileName,PathName] = uigetfile('*.*','选择测试图片数据文件t10k-images.idx3-ubyte'); %暴露图片路径 saved ...

  10. 移动端 web开发心得

    吐槽:华为p9 内置浏览器就是个渣,各种奇葩的bug,1.如果将一个输入框的最大长度设为4,然后输入4个后,js将输入的值置空,就无法再输入了 手机上浏览器比较蛋疼的是,点击一个输入框,输入法将页面挡 ...