【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]排名系统 试题描述 排名系统通常要应付三种请求:上传一条新的得分记录.查询某个玩家的当前排名以及返回某个区段内的排名记录 ...
随机推荐
- 构造函数constructor 与析构函数destructor(一)
构造函数定义:构造函数c++中在创建对象时自动调用,用来初始化对象的特殊函数. (1)构造函数的名字必须与类的名字相同,不能有返回值,哪怕是void 也不行. (2)通常情况下构造函数应声明为公有函数 ...
- Product of integers
https://github.com/Premiumlab/Python-for-Algorithms--Data-Structures--and-Interviews/blob/master/Moc ...
- Number.isInteger在IE中报错的解决方法
if (!Number.isInteger) { Number.isInteger = function(num) { return typeof num == "number" ...
- 2018.09.16 loj#10243. 移棋子游戏(博弈论)
传送门 题目中已经给好了sg图,直接在上面跑出sg函数即可. 最后看给定点的sg值异或和是否等于0就判好了. 代码: #include<bits/stdc++.h> #define N 2 ...
- xampp环境 安装 用法 composer
准备工作 1.打开PHP配置文件E:\xampp\php\php.ini确认以下模块已开启(移除前面的分号). extension=php_openssl.dll, extension=php_cur ...
- hdu-1251(string+map)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1251 思路:重点是用gets输入,而且用a[20],不能直接输入string类型的. #include ...
- Linux Vim替换字符串的一些方法小结
使用Linux环境 进行开发工作的程序猿经常有编辑器之争,是vim牛还是emacs棒.二者都是程序猿的开发神器,不管用好哪一个都会使你的工作事半功倍. 本文重点介绍 Vim的替换字符串方法技巧,这些方 ...
- Linux服务器部署系列之八—Sendmail篇
Sendmail是目前Linux系统下面用得最广的邮件系统之一,虽然它存在一些不足,不过,目前还是有不少公司在使用它.对它的学习,也能让我们更深的了解邮件系统的运作.下面我们就来看看sendmail邮 ...
- Spring Boot的自动配置的原理浅析
一.原理描述 Spring Boot在进行SpringApplication对象实例化时会加载META-INF/spring.factories文件,将该配置文件中的配置载入到Spring容器. 二. ...
- DIV+CSS实战(五)
一.说明 前面实现了关键词订阅模块,现在实现站点订阅模块,主要实现的是站点添加界面.站点添加界面里面实现一个提示框不在提示的功能(保存到cookie中),还有就是实现一个站点的选择框,包括输入文字自动 ...
