Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 77   Accepted: 10

Description

随着YYHS的OI集训队人数急剧增加,原有的小机房已经容纳不了数量庞大的队员。

于是史老师决定租用一些实验室机位供队员们训练,他正在考虑为N (1 <= N <= 50,000)位队员租用机位。实验室管理员根据要求给出了N个机位的长和宽,每个机位的长宽满足(1 <= 宽 <= 1,000,000; 1 <= 长 <= 1,000,000).

而机位的租用价格是它的面积,实验室管理员也提出,可以同时租用多个机位. 租用这一组机位的价格是它们最大的长乘以它们最大的宽, 但是机位的长宽不能交换. 如果想租下一个3x5的机位和一个5x3的机位,则他需要付5x5=25.

于是问题出现了,史老师希望租下所有的机位,但是他发现分组来租这些机位可以节省经费. 他需要你帮助他找到最小的经费.

Input

* 第1行: 一个数: N

* 第2..N+1行: 每行包含两个数,分别为机位的长和宽

Output

* 第一行: 最小的可行费用.

Sample Input


4
100 1
15 15
20 5
1 100

Sample Output


500

这题如果是用n*n的dp,会超时,所以要用斜率优化,和hdu3669差不多的思路。

#include<iostream>
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<string>
#include<algorithm>
using namespace std;
#define ll long long
#define inf 999999999999999999
#define maxn 50050
struct node{
ll w,h;
}a[maxn],b[maxn]; bool cmp(node a,node b){
if(a.w==b.w)return a.h>b.h;
return a.w>b.w;
}
ll dp[maxn];
ll q[1111111];
ll getup(int x)
{
return dp[x];
}
ll getdown(int x)
{
return -b[x+1].w; } int main()
{
int n,m,i,j,tot,k;
while(scanf("%d",&n)!=EOF)
{
for(i=1;i<=n;i++){
scanf("%d%d",&a[i].w,&a[i].h);
}
sort(a+1,a+1+n,cmp);
tot=1;b[tot].w=a[1].w;b[tot].h=a[1].h;
for(i=2;i<=n;i++){
if(b[tot].h>=a[i].h)continue;
tot++;b[tot].w=a[i].w;b[tot].h=a[i].h; }
int front,rear;
front=1;rear=1;
q[rear]=0;
for(i=1;i<=tot;i++){
//dp[i]=b[1].w*b[i].h; 这里如果前面不把0加入队列的话,那么这句话要加上。
while(front<rear && getup(q[front+1])-getup(q[front])<=b[i].h*(getdown(q[front+1])-getdown(q[front]) ) ){
front++;
}
k=q[front];
dp[i]=dp[k]+b[k+1].w*b[i].h;
//dp[i]=min(dp[i],dp[k]+b[k+1].w*b[i].h);
while(front<rear && ( getup(q[rear])-getup(q[rear-1] ) )*(getdown(i)-getdown(q[rear] ))>=( getup(i)-getup(q[rear] ) )*(getdown(q[rear])-getdown(q[rear-1] )) ){
rear--;
}
rear++;
q[rear]=i; }
printf("%lld\n",dp[tot]);
}
return 0;
}

最新文章

  1. Python安装时报缺少DLL的解决办法
  2. 一道int与二进制加减题
  3. IoC 之 2.3 IoC的配置使用(叁)
  4. web压力测试 - http_load
  5. linux下搭建nginx+php(FastCGI)+mysql运行环境
  6. uva 10047 the monocyle (四维bfs)
  7. 【转】shell 教程——03 Shell脚本语言与编译型语言的差异
  8. HDU2017JAVA
  9. 百度富文本编辑器ueditor在jsp中的使用(ssm框架中的应用)
  10. Principal Components Regression, Pt.1: The Standard Method
  11. Center OS 7 安装 $$
  12. QC的使用简介
  13. nlp词性标注
  14. Python使用Plotly绘图工具,绘制气泡图
  15. django系列5:视图
  16. su: authentication failure 解决方法
  17. python 打包成 windows .EXE
  18. Hive-1.2.1_05_案例操作
  19. 读书笔记(05) - 事件 - JavaScript高级程序设计
  20. java学习-加载.properties工具类

热门文章

  1. LeetCode 二分查找模板 II
  2. Svm算法原理及实现
  3. docker save 保存导出镜像
  4. 24V转5V芯片,高输入电压LDO线性稳压器
  5. 从定义到AST及其遍历方式,一文带你搞懂Antlr4
  6. 邮箱发送API .Net
  7. 一例 Go 编译器代码优化 bug 定位和修复解析
  8. ETL调优的一些分享(下)(转载)
  9. libevent源码学习之event
  10. BIO,NIO,AIO 总结