[ZJOI2006]碗的叠放
Description
小H有n个碗需要放进橱柜,她希望将他们叠起来放置。你知道每个碗都是规则的圆柱体,并且都是上宽下窄,你已经测量出了每个碗的两个半径及高,请你帮小H找出一种叠放顺序,使得叠放出来的碗堆的高度尽量小,比如:
Input
第一行一个整数n,表示碗的数目。以下n行,每行三个整数h,r1,r2。分别表示碗高及两个半径。
Output
仅一个数,表示最小的高度。答案四舍五入取整。
Sample Input
3
50 30 80
35 25 70
40 10 90
Sample Output
55
HINT
数据范围:100%数据满足n < = 9。所有输入的数绝对值不超过1000。
n<=9,直接想一下暴力枚举每一种放置顺序,求最小的答案即可。
那我们怎么求一种排序方案的高度呢?
分几种情况讨论:
最简单的两种:
1.如果上面的碗的碗底半径比下面的碗的碗口半径还要大(或者等于),直接卡住。
2.如果上面的碗的碗口半径比下面的碗的碗口半径还要小(或等于),可以放进去,但有可能在下底面卡住。
如果这两种情况都不是,那只能看一下碗壁的斜率了。
1.下面的碗壁大于上面的碗壁的斜率
算出在哪里是卡住的,再加上即可。
2.下面的碗壁小于等于上面的碗壁的斜率
同理。
但是有一个小情况:有可能放完碗后中间是凹下去的,这时要取得是外面的碗高。
#include<bits/stdc++.h>
using namespace std;
struct data
{
double a,b,c,d;
}a[21],b[21];
int n,c[21];
double x,y,z;
data putin(double a,double b,double c,double d)
{
data aa;
aa.a=a;
aa.b=b;
aa.c=c;
aa.d=d;
return aa;
}
double getxl(data a)
{
return (a.d-a.b)/(a.c-a.a);
}
double work(data a,data b)//两个碗放置的高度
{
double p=a.b;
if(b.a>=a.c)
{
return a.d;
}
a.b=0;
a.d-=p;
if(getxl(a)>getxl(b))
{
if(b.c>=a.c)
{
double k=a.d-(a.c-b.a)*getxl(b);
return p+max(k,0.0);
}
double k=a.d-b.d-(a.c-b.c)*getxl(a);
return p+max(k,0.0);
}else{
if(a.a>b.a)
{
return p;
}
double k=a.d-(a.c-b.a)*getxl(a);
return p+max(k,0.0);
}
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%lf%lf%lf",&x,&y,&z);
a[i]=putin(y,0.0,z,x);
}
for(int i=1;i<=n;i++)
{
c[i]=i;
}
double minn=1e9;
while(1)//计算每种排列的总高度
{
b[0]=putin(1e9,0.0,1e9,0.0);
for(int i=1;i<=n;i++)
{
double maxn=0;
for(int j=0;j<i;j++)
{
maxn=max(maxn,work(b[j],a[c[i]]));
}
b[i]=putin(a[c[i]].a,a[c[i]].b+maxn,a[c[i]].c,a[c[i]].d+maxn);//放好的碗
}
double maxn=0;
for(int i=1;i<=n;i++)
{
maxn=max(maxn,b[i].d);
}
minn=min(minn,maxn);
if(!next_permutation(c+1,c+n+1))//下一种排列
{
break;
}
}
printf("%.0lf\n",minn);
return 0;
}
[ZJOI2006]碗的叠放的更多相关文章
- BZOJ 1859 Luogu P2589 [ZJOI2006]碗的叠放 (计算几何)
woc, 13年前的ZJOI就这么毒瘤的嘛... 题目链接: (bzoj)https://www.lydsy.com/JudgeOnline/problem.php?id=1859 (luogu)ht ...
- 【BZOJ1859】【ZJOI2006】碗的叠放
题目大意:给你n个碗,求如何堆叠,使得它们的总高度最低. 首先,我们枚举碗的叠放顺序. 假设我们已经堆好了前i个碗,那么在堆第i+1个碗时,我们要将第i+1个碗与前i个碗比较,确定第i+1个碗的离地高 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- BZOJ 1862: [Zjoi2006]GameZ游戏排名系统 [treap hash]
1862: [Zjoi2006]GameZ游戏排名系统 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1318 Solved: 498[Submit][ ...
- [BZOJ1861][Zjoi2006]Book 书架
[BZOJ1861][Zjoi2006]Book 书架 试题描述 小T有一个很大的书柜.这个书柜的构造有些独特,即书柜里的书是从上至下堆放成一列.她用1到n的正整数给每本书都编了号. 小T在看书的时候 ...
- BZOJ 1861: [Zjoi2006]Book 书架
1861: [Zjoi2006]Book 书架 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 1290 Solved: 740[Submit][Stat ...
- BZOJ1864[ZJOI2006]三色二叉树[树形DP]
1864: [Zjoi2006]三色二叉树 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 773 Solved: 548[Submit][Status] ...
- 【BZOJ1003】【ZJOI2006】物流运输
1003: [ZJOI2006]物流运输trans Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2556 Solved: 1008[Submit] ...
- [BZOJ1056][BZOJ1862][HAOI2008][Zjoi2006]排名系统
[BZOJ1056][BZOJ1862][HAOI2008][Zjoi2006]排名系统 试题描述 排名系统通常要应付三种请求:上传一条新的得分记录.查询某个玩家的当前排名以及返回某个区段内的排名记录 ...
随机推荐
- Hyper-V安装CentOS 8问题
CentOS 8 已经发布很长时间了,作为一直折腾Linux虚拟机的一员怎么少的了我. 环境&准备工作 系统:Win 10 pro 19H1 虚拟机:Hyper-V ISO:CentOS 8 ...
- robotframework框架 - seleniumLibrary 关键字解读-全攻略
在robotframework当中,要实现web自动化,则需要使用SeleniumLibrary这个库. 目前版本中,有180+关键字.随着版本的更新,关键字的个数和名字也会有所变动. 在网上没有找到 ...
- 【SQL】 收入支出求盈亏
求项目ID为1000的盈亏 表名为:T 字段:ID P_ID AMOUNT TYPE(1:收入 2:支出) '
- UVA - 11400 Lighting System Design
题文: You are given the task to design a lighting system for a huge conference hall. After doing a lot ...
- 学以致用,通过字节码理解:Java的内部类与外部类之私有域访问
目录: 内部类的定义及用处 打开字节码理解内部类 一.内部类的定义及用处 内部类(inner class)是定义在另一个类中的类.使用内部类,我们可以: 访问该类定义所在的作用域中的数据,包括私有的数 ...
- 项目开发---使用node.js中sass语法
前言:本文中所有sass文件都指后缀名为scss的文件.在此也建议使用后缀名为scss的文件,以避免sass后缀名的严格格式要求报错. 一.sass插件的安装: gulp-sass-china // ...
- go-数组-切片-字典
声明一个数组变量的同时为该变量赋值. ], , } 另一种便捷方法, 类型字面量中省略代表其长度的数字 , , } 对于数组来说,索引值既不能小于0也不能大于或等于数组值的长度. 索引值的最小有效值从 ...
- Head First设计模式——装饰者模式
前言:对于设计模式我们有时候在想是否有必要,因为实际开发中我们没有那么多闲工夫去套用这么多设计模式,也没有必要为了模式而模式. 通常这些模式会引入新的抽象层,增加代码的复杂度,但是当我们掌握了这些设计 ...
- POJ 1753 Flip Game(状态压缩+BFS)
题目网址:http://poj.org/problem?id=1753 题目: Flip Game Description Flip game is played on a rectangular 4 ...
- vue实现跑马灯效果
vue实现跑马灯效果为阿中哥哥应援 1.效果图 2.实现代码 <!DOCTYPE html> <html lang="en"> <head> & ...