uva 1354 Mobile Computing ——yhx
来源:互联网 发布:医疗软件项目 编辑:程序博客网 时间:2024/06/08 06:30
1 #include<cstdio> 2 #include<cmath> 3 #include<cstring> 4 struct node 5 { 6 int fat,lson,rson; 7 double wei; 8 }tree[500]; 9 double w[10],lim,ans;10 int n;11 double max(double x,double y)12 {13 return x>y?x:y;14 }15 void calc_sub(int p,double &l,double &r)16 {17 int i,j,k;18 double l1,r1,l2,r2,x,y;19 if (tree[p].lson)20 {21 calc_sub(tree[p].lson,l1,r1);22 calc_sub(tree[p].rson,l2,r2);23 }24 else25 l1=r1=l2=r2=0;26 x=tree[tree[p].rson].wei/tree[p].wei;27 y=tree[tree[p].lson].wei/tree[p].wei;28 l=max(l1+x,l2-y);29 r=max(r1-x,r2+y);30 }31 void calc()32 {33 int i,j,k,p;34 double l,r;35 for (i=1;i<=2*n-1;i++)36 if (tree[i].fat==0)37 {38 calc_sub(i,l,r);39 if (l+r<lim)40 ans=max(ans,l+r);41 break;42 }43 }44 void dfs(int p)45 {46 int i,j;47 if (p==n-1)48 {49 calc();50 return;51 }52 for (i=1;i<=n+p;i++)53 for (j=1;j<=n+p;j++)54 if (i!=j&&tree[i].fat==0&&tree[j].fat==0)55 {56 tree[i].fat=tree[j].fat=n+p+1;57 tree[n+p+1].lson=i;58 tree[n+p+1].rson=j;59 tree[n+p+1].wei=tree[i].wei+tree[j].wei;60 dfs(p+1);61 tree[i].fat=tree[j].fat=tree[n+p+1].lson=tree[n+p+1].rson=tree[n+p+1].wei=0;62 }63 }64 int main()65 {66 int i,j,k,p,q,x,y,z,t;67 scanf("%d",&t);68 for (i=1;i<=t;i++)69 {70 memset(tree,0,sizeof(tree));71 memset(w,0,sizeof(w));72 scanf("%lf",&lim);73 scanf("%d",&n);74 for (j=1;j<=n;j++)75 scanf("%lf",&w[j]);76 for (j=1;j<=n;j++)77 tree[j].wei=w[j];78 ans=-1;79 dfs(0);80 if (ans<0) printf("-1\n");81 else printf("%.9lf\n",ans);82 }83 }
因为数据范围并不大,所以可以枚举。
枚举的方法是枚举二叉树,之后计算每棵树的答案。
枚举的时候,每次选择两个没有父节点的节点连接,n-1次之后即得一棵二叉树。
计算的时候,分别计算两棵子树的宽,再结合本节点天平的宽。
有一个小技巧,由于计算时子程序要返回两个值(最左长度和最右长度),不能直接写成返回值,所以可以用实参引用传值。
0 0
- uva 1354 Mobile Computing ——yhx
- uva 1354 Mobile Computing ——yhx
- uva 1354——Mobile Computing
- uva 1354 - Mobile Computing
- uva 1354 Mobile Computing
- uva 1354 Mobile Computing
- uva 839 not so mobile——yhx
- uva 839 not so mobile——yhx
- uva 1354 - Mobile Computing(dfs)
- UVA - 1354 Mobile Computing dfs
- UVA 1354(p197)----Mobile Computing
- uva 1354 Mobile Computing code2
- UVA 1354 - Mobile Computing(暴力枚举)
- UVA 1354 - Mobile Computing(暴力枚举子集)
- UVa 1354 - Mobile Computing <枚举+二叉树>
- 天平难题(Mobile Computing,UVa 1354)
- UVA 1354 Mobile Computing 枚举二叉树 *
- UVA 1354 Mobile Computing(暴力)
- Contains Duplicate II
- uva 140 bandwidth (好题) ——yhx
- java jdbc数据库连接使用
- 在PullToRefresh中设置头布局
- 提升mac下的开发效率
- uva 1354 Mobile Computing ——yhx
- IntelliJ - idea15.0.2 破解方法
- 用 Retrofit 2 简化 HTTP 请求
- iOS 单列的创建和销毁
- Mac OS X下安装配置MySQL数据库
- 从IaaS到PaaS,天云软件助力企业云化有底气!
- 将varchar修改为clob的方法
- uva 120 stacks of flapjacks ——yhx
- 稀疏矩阵