UVA 10012 How Big Is It?(暴力枚举)
How Big Is It? |
Ian's going to California, and he has to pack his things, including his collection of circles. Given a set of circles, your program must find the smallest rectangular box in which they fit. All circles must touch the bottom of the box. The figure below shows an acceptable packing for a set of circles (although this may not be the optimal packing for these particular circles). Note that in an ideal packing, each circle should touch at least one other circle (but you probably figured that out).

Input
The first line of input contains a single positive decimal integer n , n <=50. This indicates the number of lines which follow. The subsequent n lines each contain a series of numbers separated by spaces. The first number on each of these lines is a positive integer m , m <=8, which indicates how many other numbers appear on that line. The next m numbers on the line are the radii of the circles which must be packed in a single box. These numbers need not be integers.
Output
For each data line of input, excluding the first line of input containing n , your program must output the size of the smallest rectangle which can pack the circles. Each case should be output on a separate line by itself, with three places after the decimal point. Do not output leading zeroes unless the number is less than 1, e.g. 0.543
.
Sample Input
- 3
- 3 2.0 1.0 2.0
- 4 2.0 2.0 2.0 2.0
- 3 2.0 1.0 4.0
Sample Output
- 9.657
- 16.000
- 12.657
题意。。给定t组数据。每组数据包含一个n。然后输入n个圆的半径。。
然后要计算出。最小需要多长的盒子。才能把所有圆横着放满。。
思路:暴力枚举。。由于圆最多8个。完全可以暴力。。。
就是计算长度的时候麻烦点。。我的方法是:保存下每个圆的横坐标。。圆的横坐标加半径。最大的就是当前情况所需要的盒子大小。在从所有情况中找出最小的。。。每个圆放进去。都必定会与一个圆或者左边的墙壁相切。所以找出当前圆和前面所有放置的圆的横坐标最大的就是当前圆的横坐标。。
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <ctype.h>
- #include <math.h>
- #include <iostream>
- #include <algorithm>
- using namespace std;
- int t;
- int n;
- double minn;
- struct Y
- {
- double x;
- double r;
- } yuan[10];
- bool cmp(Y a, Y b)
- {
- return a.r < b.r;
- }
- void find()
- {
- double you = 0;
- for (int i = 1; i <= n; i ++)
- {
- double maxx = 0;
- for (int j = 0; j < i; j ++)
- {
- double dd;
- if (j == 0)
- dd = yuan[i].r;
- else
- dd = sqrt((yuan[i].r + yuan[j].r) * (yuan[i].r + yuan[j].r) - (yuan[i].r - yuan[j].r) * (yuan[i].r - yuan[j].r));
- if (maxx < dd + yuan[j].x)
- {
- maxx = dd + yuan[j].x;
- }
- }
- yuan[i].x = maxx;
- }
- double sb = 0;
- for (int i = 1; i <= n; i ++)
- {
- if (sb < yuan[i].x + yuan[i].r)
- {
- sb = yuan[i].x + yuan[i].r;
- }
- }
- if (minn > sb)
- minn = sb;
- }
- int main()
- {
- scanf("%d", &t);
- while (t --)
- {
- minn = 999999999;
- memset(yuan, 0, sizeof(yuan));
- scanf("%d", &n);
- for (int i = 1; i <= n; i ++)
- {
- scanf("%lf", &yuan[i].r);
- }
- sort(yuan + 1, yuan + n + 1, cmp);
- find();
- while (next_permutation(yuan + 1, yuan + n + 1, cmp))
- {
- for (int i = 0; i <= n; i ++)
- {
- yuan[i].x = 0;
- }
- find();
- }
- printf("%.3lf\n", minn);
- }
- return 0;
- }
UVA 10012 How Big Is It?(暴力枚举)的更多相关文章
- UVA 617 - Nonstop Travel(数论+暴力枚举)
题目链接:617 - Nonstop Travel 题意:给定一些红绿灯.如今速度能在30-60km/h之内,求多少个速度满足一路不遇到红灯. 思路:暴力每个速度,去推断可不能够,最后注意下输出格式就 ...
- UVA 11059 Maximum Product【三层暴力枚举起终点】
[题意]:乘积最大的子序列.n∈[1,10],s∈[-10,10] [代码]: #include<bits/stdc++.h> using namespace std; int a[105 ...
- UVA.12716 GCD XOR (暴力枚举 数论GCD)
UVA.12716 GCD XOR (暴力枚举 数论GCD) 题意分析 题意比较简单,求[1,n]范围内的整数队a,b(a<=b)的个数,使得 gcd(a,b) = a XOR b. 前置技能 ...
- uva 11088 暴力枚举子集/状压dp
https://vjudge.net/problem/UVA-11088 对于每一种子集的情况暴力枚举最后一个三人小组取最大的一种情况即可,我提前把三个人的子集情况给筛出来了. 即 f[S]=MAX{ ...
- UVA - 11464 Even Parity 【暴力枚举】
题意 给出一个 01 二维方阵 可以将里面的 0 改成1 但是 不能够 将 1 改成 0 然后这个方阵 会对应另外一个 方阵 另外一个方阵当中的元素 为 上 下 左 右 四个元素(如果存在)的和 要求 ...
- 紫书 例题 10-2 UVa 12169 (暴力枚举)
就是暴力枚举a, b然后和题目给的数据比较就ok了. 刘汝佳这道题的讲解有点迷,书上讲有x1和a可以算出x2, 但是很明显x2 = (a * x1 +b) 没有b怎么算x2?然后我就思考了很久,最后去 ...
- CodeForces 742B Arpa’s obvious problem and Mehrdad’s terrible solution (暴力枚举)
题意:求定 n 个数,求有多少对数满足,ai^bi = x. 析:暴力枚举就行,n的复杂度. 代码如下: #pragma comment(linker, "/STACK:1024000000 ...
- 2014牡丹江网络赛ZOJPretty Poem(暴力枚举)
/* 将给定的一个字符串分解成ABABA 或者 ABABCAB的形式! 思路:暴力枚举A, B, C串! */ 1 #include<iostream> #include<cstri ...
- HNU 12886 Cracking the Safe(暴力枚举)
题目链接:http://acm.hnu.cn/online/?action=problem&type=show&id=12886&courseid=274 解题报告:输入4个数 ...
随机推荐
- 使用Merge存储引擎实现MySQL分表
一.使用场景 Merge表有点类似于视图.使用Merge存储引擎实现MySQL分表,这种方法比较适合那些没有事先考虑分表,随着数据的增多,已经出现了数据查询慢的情况. 这个时候如果要把已有的大数据量表 ...
- 微信JS-SDK之图像接口开发详解
由于现在手头的项目中有一个上传证件照认证的功能(手机端),之前的思路是直接点击上传,然后直接将图片上传到服务器去,这篇文章有讲到(http://www.cnblogs.com/it-cen/p/453 ...
- HDU - 1027 Ignatius and the Princess II 全排列
Ignatius and the Princess II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ( ...
- web计时机制
前面的话 页面性能一直都是Web开发人员比较关注的领域.但在实际应用中,度量页面性能的指标,是javascript的Date对象.Web Timing API改变了这个局面,让开发人员通过javasc ...
- [BZOJ5302][HAOI2018]奇怪的背包(DP)
由裴蜀定理得,一个集合S能得到w当且仅当gcd(S+{P})|w. 于是f[i][j]表示前i个物品gcd为j的方案数,发现gcd一定是P的因数,故总复杂度$O(n\sqrt{P}\log P)$(需 ...
- [ZHOJ1956]vfk的地雷
题目大意: 有$n$个开关,$r$句话. 每个开关$i$有$p_i$的概率被触发,并造成$d_i$的代价. 每个开关至多被触发一次,一句话至多触发一个开关. 每个开关按照顺序被尝试触发. 求期望代价. ...
- hdu 1518 dfs+剪枝
题目大意:几根棒子能否组成一个正方形 Sample Input3 //测试组数4 1 1 1 1 //棒子数目以及每根棒子的长度5 10 20 30 40 508 1 7 2 ...
- MAC下安装多版本JDK和切换几种方式
环境: MAC AIR,OS X 10.10,64位 历史: 过去 Mac 上的 Java 都是由 Apple 自己提供,只支持到 Java 6,并且OS X 10.7 开始系统并不自带(而是可选 ...
- 【洛谷】2473:[SCOI2008]奖励关【期望DP(倒推)】
P2473 [SCOI2008]奖励关 题目背景 08四川NOI省选 题目描述 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不 ...
- bzoj 1798: [Ahoi2009]Seq 维护序列seq 线段树 区间乘法区间加法 区间求和
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeO ...