【BZOJ1859】【ZJOI2006】碗的叠放
题目大意:给你n个碗,求如何堆叠,使得它们的总高度最低。
首先,我们枚举碗的叠放顺序。
假设我们已经堆好了前i个碗,那么在堆第i+1个碗时,我们要将第i+1个碗与前i个碗比较,确定第i+1个碗的离地高度。
对于第i个碗和第j个碗的比较,我们分五种情况讨论(以下画图只画半个碗):
![]() |
上方的碗底比下方的碗顶大,直接放上去即可 |
|
上方的碗底比下方碗底小,直接放上去即可 |
|
上方的碗边缘斜率小于下方的碗,且上方的碗比下方的碗大,的计算出其中一个碗的斜率,然后卡位即可 |
|
情况和上图类似,也是直接卡位即可。 |
|
上方的碗边缘斜率大于下方的碗,也是直接卡位。 |
具体的细节可以看我的代码。
然后请一定要仔细检查所有细节(我错了一个字母调了2h)
#include<bits/stdc++.h>
#define M 10
using namespace std; struct node{
double a,b,c,d;
node(){a=b=c=d=;}
node(double aa,double bb,double cc,double dd){
a=aa; b=bb; c=cc; d=dd;
}
double xl(){return (d-b)/(c-a);}
friend double operator -(node a,node b){
double p=a.b; a.b-=p; a.d-=p;
//if(a.a>=b.a&&a.c>=b.c) return p;
if(a.c<=b.a) return p+a.d;
if(a.xl()>b.xl()){
if(b.c>=a.c){
double k=a.d-(a.c-b.a)*b.xl();
k=max(k,.);
return p+k;
}
double k=a.d-b.d-(a.c-b.c)*a.xl();
k=max(k,.);
return p+k;
}else{
if(b.a<=a.a) return p;
double k=a.d-(a.c-b.a)*a.xl();
k=max(k,.);
return p+k;
}
}
}a[M],s[M];
int n,p[M]={};
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++){
double x,y,z; cin>>x>>y>>z;
a[i]=node(y,,z,x);
}
for(int i=;i<=n;i++) p[i]=i;
double minn=1e10;
while(){
memset(s,,sizeof(s));
s[]=node(1e20,,1e21,);
for(int i=;i<=n;i++){
double maxn=;
for(int j=;j<i;j++)
maxn=max(maxn,s[j]-a[p[i]]);
s[i]=node(a[p[i]].a,maxn,a[p[i]].c,a[p[i]].d+maxn);
}
double maxn=;
for(int i=;i<=n;i++) maxn=max(maxn,s[i].d);
if(maxn<minn)
minn=min(minn,maxn);
if(!next_permutation(p+,p+n+)) break;
}
printf("%.0lf\n",minn);
}
【BZOJ1859】【ZJOI2006】碗的叠放的更多相关文章
- BZOJ 1859 Luogu P2589 [ZJOI2006]碗的叠放 (计算几何)
woc, 13年前的ZJOI就这么毒瘤的嘛... 题目链接: (bzoj)https://www.lydsy.com/JudgeOnline/problem.php?id=1859 (luogu)ht ...
- [ZJOI2006]碗的叠放
Description 小H有n个碗需要放进橱柜,她希望将他们叠起来放置.你知道每个碗都是规则的圆柱体,并且都是上宽下窄,你已经测量出了每个碗的两个半径及高,请你帮小H找出一种叠放顺序,使得叠放出来的 ...
- 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]排名系统 试题描述 排名系统通常要应付三种请求:上传一条新的得分记录.查询某个玩家的当前排名以及返回某个区段内的排名记录 ...
随机推荐
- centos7 rabbitmq安装以及应用
安装单机rabbitmq 1.安装erlang cd /usr.local yum install wget yum install net-tools wget http://erlang.or ...
- java读取网页图片路径并下载到本地
java读取网页图片路径并下载到本地 最近公司需要爬取一些网页上的数据,自己就简单的写了一个demo,其中有一些数据是图片,需要下载下来到本地并且 将图片的路径保存到数据库,示例代码如下: packa ...
- [转载][翻译]Go的50坑:新Golang开发者要注意的陷阱、技巧和常见错误[2]
Golang作为一个略古怪而新的语言,有自己一套特色和哲学.从其他语言转来的开发者在刚接触到的时候往往大吃苦头,我也不例外.这篇文章很细致地介绍了Golang的一些常见坑点,读完全篇中枪好多次.故将其 ...
- Docker mysql启动自动按顺序导入sql
1.目录结构 -rw-r--r-- root root Jan : Dockerfile -rw-r--r-- root root Jan : initdb.sh drwxr-xr-x root ro ...
- shell 脚本 抽取指定数量的随机学生
#!/bin/bash # #!/bin/bash # read -p '输入数' c #指定抽取的学生人数 jw=('王浩' '谢云生' '黄科杨' '何星宇' '张宸兵' '邓培林' '刘桃' ' ...
- ploymer
developer guide 接下来看声明属性 声明属性 声明属性时,可设定的参数 type:属性反序列化 value:[function(){}],配置属性默认值 readonly refle ...
- java web开发过程中的“\”指的是什么,如何区分
- aop的概述
支付部分,定义IPayService接口并定义支付方法“pay”,并定义了两个实现:“PointPayService”表示积分支付,“RMBPayService”表示人民币支付:并且在每个支付实现中支 ...
- jquery ui widgets-datepicker
jquery ui的用法就不在此讲述,直接进入jquery ui的窗体小部件(widgets)——datepicker. 相信很多像我这样子的菜鸟少年,如果同一个页面上有两个input文本输入框是用来 ...
- LeetCode135:Candy
题目: There are N children standing in a line. Each child is assigned a rating value. You are giving c ...
