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/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)的更多相关文章
- UVa 1354 Mobile Computing[暴力枚举]
**1354 Mobile Computing** There is a mysterious planet called Yaen, whose space is 2-dimensional. Th ...
- uva 1354 Mobile Computing ——yhx
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5
- Uva 1354 Mobile Computing
题目链接 题意: 在一个宽为r 的房间里, 有s个砝码, 每个天平的一端要么挂砝码, 要么挂另一个天平, 并且每个天平要保持平衡. 求使得所有砝码都放在天平上, 且总宽度不超过房间宽度的最大值. 思路 ...
- Mobile Computing: the Next Decade论文 cloudlet薄云
1 Introduction “Information at your fingertips anywhere, anytime” has been the driving vision of mob ...
- UVa 1354 天平难题 Mobile Computing
整个题考虑起来 最主要要计算的状态 是树的状态 于是要计算出所有可能挂坠可能组成的树的所有形态 tree 用于保存这些状态 考虑不要重复计算,有一个vis 数组 预处理可以先计算出一棵树的重量,简化计 ...
- UVa 1354 枚举子集 Mobile Computing
只要枚举左右两个子天平砝码的集合,我们就能算出左右两个悬挂点到根悬挂点的距离. 但是题中要求找尽量宽的天平但是不能超过房间的宽度,想不到要怎样记录结果. 参考别人代码,用了一个结构体的vector,保 ...
- 【例题 7-7 UVA - 1354】Mobile Computing
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 秤砣都是在叶子节点. 可以把它看成一个二叉树. 则我们每次只需要选择任意两个"节点",让他们组成一棵二叉树就可以 ...
- 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 ...
- UVa 1354 天平难题
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
随机推荐
- HDU1496 hash
Equations Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- Nginx 防止被域名恶意解析的方法
今天太倒霉了,发现通过IP无法访问服务器的80端口很无语,昨天都还好的啊,也没有修改过配置,其他端口又是正常的,防火墙也没问题.于是问了下机房,给了个崩溃的回复说我们的服务器有个域名没有备案被电信多次 ...
- STURTS2 HELLOWORLD
4. <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC " ...
- 第一百三十三节,JavaScript,封装库--弹出登录框
JavaScript,封装库--弹出登录框 封装库,增加了两个方法 yuan_su_ju_zhong()方法,将获取到的区块元素居中到页面,chuang_kou_shi_jian()方法,浏览器窗口事 ...
- 第六届全球游戏大会( GMGC 北京 2017 )有哪些看点?
全球游戏大会作为亚太地区极具影响力的全球性游戏行业盛会,本次第六届全球游戏大会( GMGC 北京 2017 )将力邀全球50个国家.500多位业界领袖.5000多家企业.50000多位业界精英参展参会 ...
- iOS strong与weak的使用
strong修饰的属性是强指针类型的,weak修饰的属性是弱指针类型的 ARC对于内存中的对象管理机制,当某个对象没有被强指针指向的时候,该对象就会被销毁. 所以不适当的使用strong和weak修饰 ...
- Android Studio利用异步任务AsyncTask发送post请求获取json数据
syncTask,是Android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主 ...
- [MFC美化] Skin++使用详解-使用方法及注意事项
主要分为以下几个方面: 1.Skin++使用方法 2.使用中注意事项 一. Skin++使用方法 SkinPPWTL.dll.SkinPPWTL.lib.SkinPPWTL.h ,将三个文件及相应皮肤 ...
- Saltstack Master 配置文件详解
#主配置 /etc/salt/master interface 默认值:0.0.0.0(所有的网络地址接口) 绑定到本地的某个网络地址接口 interface: 192.168.30.131 publ ...
- MySQL语句相关经验总结
1. 字段自减 UPDATE `table_name` SET `total`=IF(`total` < 1, 0, `total`-1) WHERE `id` = 1; 一般在做字段减法的时候 ...