2017.9.10 土地购买 思考记录

、、这个题结论还是比较好猜的、

就是把土地按长为第一关键字,宽为第二关键字,这样就可以省去许多包含的土地

剩下的就是长度递增、宽递减的土地:



剩下的就是斜率优化了,但wa了好几遍,,这是因为:

1、数学不好,长宽单调性看成相同的了

2、没开long long

3、斜率精度误差

4、<=和>=反了、


所以:

1、除法比较时一定要注意是不是有误差

2、准确理解斜率优化的意义

3、尝试找规律和归类法分析问题、


码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#define ll long long
using namespace std;
ll n,i,cnt,x[100005],y[100005],f[100005];
struct la
{
	ll c,k;
}a[100005],b[100005];
bool cmp(la a,la b)
{if(a.c!=b.c)
	return a.c<b.c;
	return a.k<b.k;
}
int main()
{
	scanf("%lld",&n);
	for(i=1;i<=n;i++)
	{
	scanf("%lld%lld",&a[i].c,&a[i].k);			
	}	
	sort(a+1,a+1+n,cmp);
	for(i=n;i>=1;i--)
	{
		if(a[i].k>b[cnt].k)
		b[++cnt]=a[i];
	}
	for(i=1;i<=cnt;i++)
	a[i]=b[i];
	n=cnt;
	int z1=1,z2=1;
	x[1]=a[1].c;
	y[1]=0;	
	for(i=1;i<=n;i++)
	{
		while(z1<z2&&double(y[z1]-y[z1+1])/double(x[z1]-x[z1+1])>=-a[i].k)++z1;
		ll lx,ly;
		ly=y[z1]+x[z1]*a[i].k;
		f[i]=ly;
		lx=a[i+1].c;
		while(z2-z1>=1&&double(y[z2]-ly)/double(x[z2]-lx)>=double(y[z2-1]-ly)/double(x[z2-1]-lx))--z2;		
		++z2;
		y[z2]=ly;
		x[z2]=lx;		
	}
	printf("%lld",f[n]);	
}







  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值