【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]排名系统 试题描述 排名系统通常要应付三种请求:上传一条新的得分记录.查询某个玩家的当前排名以及返回某个区段内的排名记录 ...
随机推荐
- 2018.08.31 bzoj3566: [SHOI2014]概率充电器(概率dp+容斥原理)
传送门 概率dp好题啊. 用f[i]" role="presentation" style="position: relative;">f[i] ...
- Linux设置开机启动项
第一种方式:ln -s 建立启动软连接 在Linux中有7种运行级别(可在/etc/inittab文件设置),每种运行级别分别对应着/etc/rc.d/rc[0~6].d这7个目录 Tips:/etc ...
- AngularJS标准Web业务流程开发框架—1.AngularJS模块以及启动分析
前言: AngularJS中提到模块是自定义的模块标准,提到这不得不说AngularJS是框架中的老大哥,思想相当的前卫..在这框架满天横行的时代,AngularJS有些思想至今未被超越,当然仁者见仁 ...
- Python Sleep休眠函数
#!/usr/bin/env python import os import time def fun(name): write_name="command %s failed!\n&quo ...
- AirplaceLogger源代码解析
将源代码添加进Eclipse中,右键-->Import-->Existing Projects into Workspace-->选择AirplaceLogger源代码文件夹即可导入 ...
- (最短路) Heavy Transportation --POJ--1797
链接: http://poj.org/problem?id=1797 Heavy Transportation Time Limit: 3000MS Memory Limit: 30000K To ...
- mac与win7(台式电脑)共享文件
人生处处又都坑,自己走过了,所以记下来. mac共享文件,win7访问: 1.系统偏好设置-共享-都选中就行.一般都会这样说. 2.系统偏好设置-用户与群组-解锁-客人用户-允许客人用户连接到共享文件 ...
- 团队作业(HCL队)第三周—需求改进和系统分析
2.需求&原型改进: 1.问题:游戏中坦克的移动和攻击怎么控制的? 改进: 在游戏中,我控制我方坦克,按下方向键坦克便向按下的方向移动,按下Z键,我方坦克发射炮弹.敌方坦克面向随机的方向移动, ...
- Text Converted into Speech in Pi
Step 1: Convert any text into uint8 type in matlab : Step 2: Add models in matlab : copy the uint8 n ...
- MessageBox实现自动延时关闭
1,首先新建一个winform窗体:MessageForm,设置StartPosition属性为Manual,Location属性值-500, -500 主要是为了让MessageForm窗体不显示在 ...