UVA 1354 Mobile Computing
题意:
给出房间的宽度r和s个挂坠的重量wi。设计一个尽量宽的天平(不能超过房间的宽度),挂着所有的挂坠。天平由长度为l的木棍组成,天平的一端不是挂坠就是另一个天平。必须满足n*a=m*b(l=a+b)。
分析:
建立一个二叉树,当前节点为-1代表放天平。dfs(u,m,la)u代表第几个节点,m代表目前有几个节点可用,la代表剩余几个挂坠。
代码:
#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>using namespace std;const int N = 10;const int M = 105;const double INF = 0x3f3f3f3f;int n,v[N],t[M];double w[M],l[M],r[M],val[M],ans,R;void judge(int u)//判断这种天平的宽度是不是合理{ memset(l,0,sizeof(l)); memset(r,0,sizeof(r)); memset(val,0,sizeof(val)); int i; for(i=u;i;i--) { if(t[i]==-1)//如果这个节点是天平的话记录他的左右长度。 { int x=2*i,y=2*i+1; val[i]=val[x]+val[y]; double Li=val[y]/val[i]; double Ri=val[x]/val[i]; l[i]=min(-Li+l[x],Ri+l[y]); r[i]=max(-Li+r[x],Ri+r[y]); } else if(t[i]) { val[i]=w[t[i]]; } } double tmp=r[1]-l[1]; if (tmp-R<1e-5&&tmp>ans) ans=tmp;}void dfs(int u,int m,int la){ if(la==0) { judge(u-1); return ; } if(t[u/2]!=-1) { dfs(u+1,m,la); } else { if(la>m)//如果剩余的挂坠数>可用的点,就把这个节点放天平,这样可用的节点数+1. { t[u]=-1; dfs(u+1,m+1,la); t[u]=0; } if(m==1&&la>1) return; for(int i=1;i<=n;i++) { if(!v[i]) { v[i]=1; t[u]=i; dfs(u+1,m-1,la-1); v[i]=0; t[u]=0; } } }}int main(){ int T; scanf("%d",&T); while(T--) { memset(t,0,sizeof(t)); memset(v,0,sizeof(v)); scanf("%lf%d",&R,&n); int i,j,k; for(i=1;i<=n;i++) scanf("%lf",&w[i]); t[1]=-1;ans=-1; if(n==1) printf("%.10lf\n",0.0); else { dfs(2,2,n); if(ans==-1) printf("-1\n"); else printf("%.10lf\n",ans); } } return 0;}
转载于:https://www.cnblogs.com/137033036-wjl/p/4858310.html
UVA 1354 Mobile Computing相关推荐
- UVa1354 Mobile Computing
思路:根据集合枚举可能的左集合与右集合,计算左右边的a,b,然后递归计算左子树及右子树的长度. 左边的长度为a+左子树的左长度,右子树的左长度-b之间的最大值 右边的长度为b+右子树的右长度,左子树的 ...
- 嵌入式论文分析:Energy-Efficient and Robust Middleware Prototyping for Smart Mobile Computing
基本概况 题目: Energy-Efficient and Robust Middleware Prototyping for Smart Mobile Computing 作者: Saideep T ...
- UVa 1354 天平难题 枚举二叉树
题意:给出房间宽度 r 和 s 个挂坠的重量 wi,设计一个尽量宽的天平,挂着所有挂坠.天平由一些长度为 1 的木棍组成,木棍的每一端要么挂一个挂坠,要么挂另外一个木棍. 这题卡了很久,看了很多大神的 ...
- Mobile Computing
序言 整理下移动计算在大数据计算框架中的应用,以及实现的基本条件. 确定是否只能基于HDFS的分布式存储,才能实现移动计算cuiyaonan2000@163.com HDFS HDFS提供给程序员使用 ...
- 紫书《算法竞赛入门经典》
紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...
- 训练指南第一部分解题报告
主要是提供训练指南第一部分解题报告链接,后面会持续更新中 307 - Sticks (DFS+剪枝) 11292 - Dragon of Loowater (贪心) 11729 - Commando ...
- Multi-Objective Computation Sharing in Energy and Delay Constrained Mobile Edge Computing
"Multi-Objective Computation Sharing in Energy and Delay Constrained Mobile Edge Computing Envi ...
- Mobile Edge Computing —— Paper List
Mobile Edge Computing -- Paper List 本博客主要是为了记录看过的一些有关于移动边缘计算的论文,并做一个分类.所有文章均已附上地址以供下载. 综述 1.张开元,桂小林, ...
- Mobile Edge Computing 可以投的期刊和会议
(一)期刊 CCF-A 一区期刊 主投期刊: task offloading Transactions on Mobile Computing (TMC) IEEE Transactions on P ...
最新文章
- ssh免密码登录的原理
- vue 相同的id不合并_vue中key的作用
- python使用matplotlib可视化跨年数值指标中位数变化率、使用pct_change函数计算变化率、年环比变化率(pct_change function)
- 第0次作业——读推荐博客有感
- python 判断debug
- openssl qt 生成秘钥_关于openssl作的rsa生成密钥及加解密
- vue中父子组件通信的坑
- 如何在win7(xp)home version下安装 rose 32 bit
- IDEA :windows下Hadoop报错null\bin\winutils.exe
- ajax后台返回数据中文乱码_ajax返回的数据是乱码????
- html怎么把excel表格合并单元格,Excel中如何快速合并多个单元格
- 怎么看铜皮属性_阻抗匹配怎么做 及阻抗匹配的作用。
- Android 测试
- PDF转CAD怎么转?如何将PDF文件转换成CAD文件?
- kali Linux 上编译并使用RFID核弹——proxmark3
- 1205 Lock wait timeout exceeded; try restarting transaction处理
- MWC 2018前瞻:三星华为诺基亚们会展示这些黑科技!
- 计算机硬件系统的外观组成图,计算机硬件系统及组装.doc
- Python自动化需要培训吗
- ESP8266-Arduino编程实例-MAG3110磁力计驱动
热门文章
- android fragmentpageradapter切换不更新,关于android:在FragmentPagerAdapter中更新当前片段...
- spark编程基础--2.4函数式编程基础
- spark编程基础--2.3面向对象编程基础
- iOS架构篇-4 架构模式MVVM
- Swift Code Snippet
- 无限极:对虚假宣传行为查处不力 推十条整改措施
- 反向春运成为新趋势 客流年增9%
- spring中@value注解需要注意
- centos6.5 rsync+inotify同步配置笔记
- LeetCode 125 Valid Palindrome(有效回文)(*)