题意:

  给出房间的宽度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相关推荐

  1. UVa1354 Mobile Computing

    思路:根据集合枚举可能的左集合与右集合,计算左右边的a,b,然后递归计算左子树及右子树的长度. 左边的长度为a+左子树的左长度,右子树的左长度-b之间的最大值 右边的长度为b+右子树的右长度,左子树的 ...

  2. 嵌入式论文分析:Energy-Efficient and Robust Middleware Prototyping for Smart Mobile Computing

    基本概况 题目: Energy-Efficient and Robust Middleware Prototyping for Smart Mobile Computing 作者: Saideep T ...

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

    题意:给出房间宽度 r 和 s 个挂坠的重量 wi,设计一个尽量宽的天平,挂着所有挂坠.天平由一些长度为 1 的木棍组成,木棍的每一端要么挂一个挂坠,要么挂另外一个木棍. 这题卡了很久,看了很多大神的 ...

  4. Mobile Computing

    序言 整理下移动计算在大数据计算框架中的应用,以及实现的基本条件. 确定是否只能基于HDFS的分布式存储,才能实现移动计算cuiyaonan2000@163.com HDFS HDFS提供给程序员使用 ...

  5. 紫书《算法竞赛入门经典》

    紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...

  6. 训练指南第一部分解题报告

    主要是提供训练指南第一部分解题报告链接,后面会持续更新中 307 - Sticks  (DFS+剪枝) 11292 - Dragon of Loowater (贪心) 11729 - Commando ...

  7. 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 ...

  8. Mobile Edge Computing —— Paper List

    Mobile Edge Computing -- Paper List 本博客主要是为了记录看过的一些有关于移动边缘计算的论文,并做一个分类.所有文章均已附上地址以供下载. 综述 1.张开元,桂小林, ...

  9. Mobile Edge Computing 可以投的期刊和会议

    (一)期刊 CCF-A 一区期刊 主投期刊: task offloading Transactions on Mobile Computing (TMC) IEEE Transactions on P ...

最新文章

  1. ssh免密码登录的原理
  2. vue 相同的id不合并_vue中key的作用
  3. python使用matplotlib可视化跨年数值指标中位数变化率、使用pct_change函数计算变化率、年环比变化率(pct_change function)
  4. 第0次作业——读推荐博客有感
  5. python 判断debug
  6. openssl qt 生成秘钥_关于openssl作的rsa生成密钥及加解密
  7. vue中父子组件通信的坑
  8. 如何在win7(xp)home version下安装 rose 32 bit
  9. IDEA :windows下Hadoop报错null\bin\winutils.exe
  10. ajax后台返回数据中文乱码_ajax返回的数据是乱码????
  11. html怎么把excel表格合并单元格,Excel中如何快速合并多个单元格
  12. 怎么看铜皮属性_阻抗匹配怎么做 及阻抗匹配的作用。
  13. Android 测试
  14. PDF转CAD怎么转?如何将PDF文件转换成CAD文件?
  15. kali Linux 上编译并使用RFID核弹——proxmark3
  16. 1205 Lock wait timeout exceeded; try restarting transaction处理
  17. MWC 2018前瞻:三星华为诺基亚们会展示这些黑科技!
  18. 计算机硬件系统的外观组成图,计算机硬件系统及组装.doc
  19. Python自动化需要培训吗
  20. ESP8266-Arduino编程实例-MAG3110磁力计驱动

热门文章

  1. android fragmentpageradapter切换不更新,关于android:在FragmentPagerAdapter中更新当前片段...
  2. spark编程基础--2.4函数式编程基础
  3. spark编程基础--2.3面向对象编程基础
  4. iOS架构篇-4 架构模式MVVM
  5. Swift Code Snippet
  6. 无限极:对虚假宣传行为查处不力 推十条整改措施
  7. 反向春运成为新趋势 客流年增9%
  8. spring中@value注解需要注意
  9. centos6.5 rsync+inotify同步配置笔记
  10. LeetCode 125 Valid Palindrome(有效回文)(*)