UVA 2474 - Balloons in a Box 爆搜
2474 - Balloons in a Box
题目连接:
Description
You must write a program that simulates placing spherical balloons into a rectangular box.
The simulation scenario is as follows. Imagine that you are given a rectangular box and a set of
points. Each point represents a position where you might place a balloon. To place a balloon at a
point, center it at the point and inflate the balloon until it touches a side of the box or a previously
placed balloon. You may not use a point that is outside the box or inside a previously placed balloon.
However, you may use the points in any order you like, and you need not use every point. Your objective
is to place balloons in the box in an order that maximizes the total volume occupied by the balloons.
You are required to calculate the volume within the box that is not enclosed by the balloons.
Input
The input consists of several test cases. The first line of each test case contains a single integer n
that indicates the number of points in the set (1 ≤ n ≤ 6). The second line contains three integers
that represent the (x, y, z) integer coordinates of a corner of the box, and the third line contains the
(x, y, z) integer coordinates of the opposite corner of the box. The next n lines of the test case contain
three integers each, representing the (x, y, z) coordinates of the points in the set. The box has non-zero
length in each dimension and its sides are parallel to the coordinate axes.
The input is terminated by the number zero on a line by itself.
Output
For each test case print one line of output consisting of the test case number followed by the volume of
the box not occupied by balloons. Round the volume to the nearest integer. Follow the format in the
sample output given below.
Place a blank line after the output of each test case.
Sample Input
2
0 0 0
10 10 10
3 3 3
7 7 7
0
Sample Output
Box 1: 774
Hint
题意
将n个气球放到一个长方体盒子里面, 然后气球会一直膨胀, 直到碰到盒壁或者其他气球. 先要求你找到一个放气球的顺序, 使得最后最后气球占据的体积最大.
数据规模: 1≤n≤6
题解:
直接爆搜就好了,数据范围很小……
代码
#include<bits/stdc++.h>
using namespace std;
const int maxn = 10;
const double eps = 1e-8;
const double pi = acos(-1.0);
double sqr(double x)
{
return x*x;
}
double dis(double x1,double y11,double z1,double x2,double y2,double z2)
{
return sqrt(sqr(x1-x2)+sqr(y11-y2)+sqr(z1-z2));
}
int n;
double x[maxn],y[maxn],z[maxn],ans,r[maxn];
int vis[maxn],u[maxn],cas;
double x1,y11,z1,x2,y2,z2,a,b,c;
void QAQ()
{
memset(vis,0,sizeof(vis));
}
void dfs(int cnt,double v)
{
if(cnt>=n){
ans=min(ans,v);
return;
}
for(int i=0;i<n;i++){
if(vis[i])continue;
vis[i]=1,u[cnt]=i;
r[cnt]=min(x[i],a-x[i]);
r[cnt]=min(r[cnt],min(y[i],b-y[i]));
r[cnt]=min(r[cnt],min(z[i],c-z[i]));
for(int j=0;j<cnt;j++){
double d = dis(x[i],y[i],z[i],x[u[j]],y[u[j]],z[u[j]]);
r[cnt]=min(r[cnt],d-r[j]);
}
r[cnt]=max(r[cnt],0.0);
dfs(cnt+1,v-4.0/3.0*pi*r[cnt]*r[cnt]*r[cnt]);
vis[i]=0;
}
}
void TAT()
{
cas++;
scanf("%lf%lf%lf%lf%lf%lf",&x1,&y11,&z1,&x2,&y2,&z2);
a=fabs(x1-x2),b=fabs(y11-y2),c=fabs(z1-z2);
x1=min(x1,x2),y11=min(y11,y2),z1=min(z1,z2);
for(int i=0;i<n;i++){
scanf("%lf%lf%lf",&x[i],&y[i],&z[i]);
x[i]-=x1,y[i]-=y11,z[i]-=z1;
}
ans=a*b*c;
dfs(0,a*b*c);
printf("Box %d: %.0f\n\n",cas,round(ans+eps));
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
if(n==0)break;
QAQ();
TAT();
}
}
UVA 2474 - Balloons in a Box 爆搜的更多相关文章
- UVALive 2474 Balloons in a Box(枚举)
https://vjudge.net/contest/277824#problem/A 尤其是模拟题,三思而后敲!!! 纠错了好久,主要还是没有处理好:单点若还未放气球,其他气球可以膨胀越过它(即可以 ...
- 【BZOJ-1853&2393】幸运数字&Cirno的完美算数教室 容斥原理 + 爆搜 + 剪枝
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 1817 Solved: 665[Submit][Status] ...
- POJ 1166 The Clocks (爆搜 || 高斯消元)
题目链接 题意: 输入提供9个钟表的位置(钟表的位置只能是0点.3点.6点.9点,分别用0.1.2.3)表示.而题目又提供了9的步骤表示可以用来调正钟的位置,例如1 ABDE表示此步可以在第一.二.四 ...
- 【 POJ - 1204 Word Puzzles】(Trie+爆搜|AC自动机)
Word Puzzles Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 10782 Accepted: 4076 Special ...
- hdu5323 Solve this interesting problem(爆搜)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Solve this interesting problem Time Limit ...
- hdu4536-XCOM Enemy Unknown(爆搜)
XCOM-Enemy Unknown是一款很好玩很经典的策略游戏. 在游戏中,由于未知的敌人--外星人入侵,你团结了世界各大国家进行抵抗.随着游戏进展,会有很多的外星人进攻事件.每次进攻外星人会选择3 ...
- poj1077 Eight【爆搜+Hash(脸题-_-b)】
转载请注明出处,谢谢:http://www.cnblogs.com/KirisameMarisa/p/4298840.html ---by 墨染之樱花 题目链接:http://poj.org/pr ...
- [NOIP2015] 斗地主 大爆搜
考试的时候想了半天,实在是想不到解决的办法,感觉只能暴力..然后暴力也懒得打了,小数据模拟骗30分hhh 然而正解真的是暴力..大爆搜.. 然后我的内心拒绝改这道题(TAT) 不过在wcx大佬的帮助下 ...
- BZOJ 1207: [HNOI2004]打鼹鼠【妥妥的n^2爆搜,dp】
1207: [HNOI2004]打鼹鼠 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3259 Solved: 1564[Submit][Statu ...
随机推荐
- rabbitmq之后台管理和用户设置(三)
前言 前面介绍了erlang环境的安装和rabbitmq环境安装,接下来介绍rabbitmq的web管理和用户设置. 启用后台管理插件 通过后台管理插件我们可以动态监控mq的流量,创建用户,队列等. ...
- 【驱动】USB驱动实例·串口驱动·键盘驱动【转】
转自:http://www.cnblogs.com/lcw/p/3159370.html Preface USB体系支持多种类型的设备. 在 Linux内核,所有的USB设备都使用 usb_drive ...
- Python Challenge 第 5 关攻略:peak
# -*- coding: utf-8 -*- # @Time : 2018/9/26 14:03 # @Author : cxa # @File : pickledemo.py # @Softwar ...
- pre,html转义,abbr缩写,表格table
<pre></pre>预定义文本标签pre(保留换行和空格) <sdds>对html转义 <abbr title="sddsdsds"&g ...
- 两个Bounding Box的IOU计算代码
Bounding Box的数据结构为(xmin,ymin,xmax,ymax) 输入:box1,box2 输出:IOU值 import numpy as np def iou(box1,box2): ...
- sqlserver中一些常用的函数总结
去掉空格方面 LTRIM('内容'):去掉字符串左边的空格 RTRIM('内容'):去掉右边的空格 LTRIM(RTRIM('内容')):去掉字符串左边和右边的空格 REPLACE(‘内容’,' ', ...
- Oracle 函数 “把当前的用户(审核人,审核通过后)插入到数据表中”
create or replace function mcode_apply_update_personnel(p_mca_no VARCHAR2, -- 参数(实参) p_action VARCHA ...
- Jdk 和 Tomcat的 安装。
1.再分发服务器上下载JDK,然后利用xftp上传到聚石塔等 2. 解压: tar -zxvf jdk-8u121-linux-x64.tar.gz 3.配置环境变量: export JAVA_HOM ...
- 动态规划面试题基础合集1--数学三角形,LIS , LCS, CSD
动态规划的一般思路是分为四步,即:寻找最优子结构.递归定义最优子结构.自底向上求解最优子结构和构造最优解. 接下来我列举出几个常见的动态规划面试题进行说明. (1)数学三角形:比较简单,直接贴一个我看 ...
- 《精通Python设计模式》学习之工厂方法
小书,在我以前作数据库的连接时,就用了这个工厂方法的. 归纳总结一下,更有利于成长吧. import xml.etree.ElementTree as etree import json class ...