首页 > 其他分享 >土地购买

土地购买

时间:2024-06-10 12:12:45浏览次数:10  
标签:ch long len 土地 wid 购买 push define

image
首先我们可以打一个暴力,复杂度为\(O(n^3)\)
\(f[i]=min(f[i],f[j]+len_{max} \times wid_{max})\)

点击查看代码
#include <bits/stdc++.h>
#define ll long long
#define mk make_pair 
#define pb push_back
#define pf push_front
#define lid (rt<<1)
#define rid (rt<<1|1)
#define speed() ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
using namespace std;
const int N = 5e4+5;
ll n,f[N];
inline ll read()
{
	ll x=0,f=1;char ch=getchar();
	for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
	for(;ch>='0'&&ch<='9';ch=getchar())x=(x<<3)+(x<<1)+(ch^48);
	return x*f;	
}
struct ac
{
	ll len,wid;
}a[N];
bool cmp(ac a,ac b)
{
	return a.len<b.len;
}
int main()
{
//	speed();
	n=read();
	for(int i=1;i<=n;i++)
	{
		a[i].len=read();a[i].wid=read();
//		cin>>a[i].len>>a[i].wid;
	}
	sort(a+1,a+1+n,cmp);
	memset(f,0x3f,sizeof f);
	f[0]=0;
	for(int i=1;i<=n;i++)
	{
		for(int j=0;j<=i;j++)
		{
			ll le=0,w=0;
			for(int k=j+1;k<=i;k++)
			{
				le=max(a[k].len,le);
				w=max(a[k].wid,w);
			}
//			cout<<le<<" "<<w<<endl;
			f[i]=min(f[i],f[j]+le*w);
		}
	}
	cout<<f[n];
	return 0;
}

首先,len单调递增排过序了
如何优化呢,我们可以除去一些无用的土地,即\(i>j且len_i>len_j且 wid_i>wid_j\)则\(j\)是无用的
这样我们筛选完以后,就无需找最大值最小值
\(F[i]=min(f[j]+acc[j+1].wid*acc[i].len)\)
但这样仍然过不了

点击查看代码
#include <bits/stdc++.h>
#define ll long long
#define mk make_pair 
#define pb push_back
#define pf push_front
#define lid (rt<<1)
#define rid (rt<<1|1)
#define speed() ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
using namespace std;
const int N = 5e4+5;
ll n,f[N],q[N],cnt;
inline ll read()
{
	ll x=0,f=1;char ch=getchar();
	for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
	for(;ch>='0'&&ch<='9';ch=getchar())x=(x<<3)+(x<<1)+(ch^48);
	return x*f;	
}
struct ac
{
	ll len,wid;
}a[N],acc[N];
bool cmp(ac a,ac b)
{
	if(a.len==b.len)return a.wid<b.wid;
	return a.len<b.len;
}
int main()
{
//	speed();
	n=read();
	for(int i=1;i<=n;i++)
	{
		a[i].len=read();a[i].wid=read();
//		cin>>a[i].len>>a[i].wid;
	}
	sort(a+1,a+1+n,cmp);
	for(int i=1;i<=n;i++)
	{
		while(cnt&&acc[cnt].wid<=a[i].wid)cnt--;
		++cnt;
		acc[cnt].len=a[i].len;
		acc[cnt].wid=a[i].wid;
	}
	memset(f,0x3f,sizeof f);
	f[0]=0;
	for(int i=1;i<=cnt;i++)
	{
//		int l=1,r=1;
		for(int j=0;j<i;j++)
		{
////			cout<<le<<" "<<w<<endl;
			f[i]=min(f[i],f[j]+acc[i].len*acc[j+1].wid);
		}
//		while(l<r&&)
	}
//	for(int i=1;i<=cnt;i++)ans=min(ans,f[i]);
	cout<<f[cnt];
	return 0;
}

我们可以再加上斜率优化
斜率为\(-acc[i].len\)
自变量\(acc[j+1].wid\)
因变量\(F[i]\)

点击查看代码
#include <bits/stdc++.h>
#define ll long long
#define mk make_pair 
#define pb push_back
#define pf push_front
#define lid (rt<<1)
#define rid (rt<<1|1)
#define speed() ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
using namespace std;
const int N = 5e4+5;
ll n,f[N],q[N],cnt;
inline ll read()
{
	ll x=0,f=1;char ch=getchar();
	for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
	for(;ch>='0'&&ch<='9';ch=getchar())x=(x<<3)+(x<<1)+(ch^48);
	return x*f;	
}
struct ac
{
	ll len,wid;
}a[N],acc[N];
bool cmp(ac a,ac b)
{
	if(a.len==b.len)return a.wid<b.wid;
	return a.len<b.len;
}
double X(int i)
{
	return acc[i+1].wid*1.0;
}
double Y(int i)
{
	return f[i]*1.0;
}
int main()
{
//	speed();
	n=read();
	for(int i=1;i<=n;i++)
	{
		a[i].len=read();a[i].wid=read();
//		cin>>a[i].len>>a[i].wid;
	}
	sort(a+1,a+1+n,cmp);
	for(int i=1;i<=n;i++)
	{
		while(cnt&&acc[cnt].wid<=a[i].wid)cnt--;
		++cnt;
		acc[cnt].len=a[i].len;
		acc[cnt].wid=a[i].wid;
	}
	memset(f,0x3f,sizeof f);
	f[0]=0;int l=1,r=1;
	for(int i=1;i<=cnt;i++)
	{
		
//		for(int j=0;j<i;j++)
//		{
//			f[i]=min(f[i],f[j]+acc[i].len*acc[j+1].wid);
//		}
		while(l<r&&(Y(q[l+1])-Y(q[l]))<=-acc[i].len*(X(q[l+1])-X(q[l])))l++;
		f[i]=f[q[l]]+acc[i].len*acc[q[l]+1].wid;
		while(l<r&&(Y(q[r])-Y(q[r-1]))*(X(i)-X(q[r]))<=(Y(i)-Y(q[r]))*(X(q[r])-X(q[r-1])))r--;
		q[++r]=i;
	}
//	for(int i=1;i<=cnt;i++)ans=min(ans,f[i]);
	cout<<f[cnt];
	return 0;
}

标签:ch,long,len,土地,wid,购买,push,define
From: https://www.cnblogs.com/wlesq/p/18240564

相关文章

  • 企业数字化转型,选择自研还是购买套装产品?答案视情况而定
    在企业数字化转型过程中,面临两大选择:自研还是购买套装产品。答案视情况而定。对于与企业主营业务线相关的系统(如市场活动、销售、服务、供应链等),应优先自研。系统如同业务流程的高速公路,企业为应对瞬息万变的市场,需边发展边完善,进行产品与服务升级、商业模式升级,系统也需敏捷......
  • 【GIS教程】土地利用转移矩阵
             随着科技社会的不断进步,人类活动对地理环境的影响与塑造日益明显,土地不断的侵蚀与改变也导致一系列的环境问题日益突出。土地利用/覆盖(LUCC)作为全球环境变化研究的重点问题为越来越多的国际研究机构所重视,研究它的变化既是对已有的工业化、城市化过程的一个......
  • Python数据分析案例45——基于融合模型(Stack)的电商用户购买行为预测
    案例背景最近618快到了,上电商购买的人很多,正好我手上还有这个用户购买行为的数据,就做了一个机器学习模型流程,然后也使用的都是常见的机器学习模型,但是加了一点创新吧,使用了stacking融合模型。简单来说就是使用了很多机器学习模型一起融合,这样的好处在于会降低方差,使预测结果更......
  • 奇特的“优惠”策略,让的客户不断回头找你购买产品,无法自拔……
    奇特的“优惠”策略,让的客户不断回头找你购买产品,无法自拔……做实体生意,难免要做一些充值,促销,打折的活动,但是你也知道,传统的打折,满减,满送,满抵,都已让客户消费麻木了,对吗?接下来,我将与你分享两个变种的打折,充值,促销的策略:一、3元办卡,消费返现传统办会员卡的方式,通常是一次......
  • Cloudflare教程:如何注册账户、购买域名、开启免费CDN服务?
    Cloudflare介绍什么是CloudflareCloudflare是一家总部位于旧金山的美国跨国科技企业,以向客户提供基于反向代理的内容分发网络(CDN)及分布式域名解析服务为主要业务。目前,Cloudflare也开始面向用户提供域名注册、购买服务,价格在8.99美金一年,相对于Namesilo来说价格比较便宜,但是其......
  • 2024云购源码/运营版/一元购源码/一元夺宝源码/指定中奖/机器人自动购买
     一元云购系统源码,稳定运行已多年无BUG,送真实玩家数据助力快速经营云购演示站:http://zhuye.6323g.com/   ......
  • shopify模板二次开发 增加购物车、立即购买功能
    <divclass="promotionDiscount"data-id="{{section.settings.promotionDiscount_id}}"><divclass="promotionDiscount_contercontainer"><divclass="promotionDiscount_title">{{section.se......
  • 购买课程,钱花销的一些问题(更新五天中go的路线)
    我觉得省点小钱把精力留给需要精力的事情是很有必要的,但是我认为需要掌握一定的决策技巧,虽然决策只能是相对完美受限经验,但不断增进知识可以家加深我们的理解这门课程:gogormgin博客rabbitmqprometheusdockeretcdgozerok8s面试题(后续其他技术随便找门课看看不一样吗)优......
  • NameCheap域名怎么样,如何注册购买域名?如何解析域名?
    Namecheap介绍Namecheap是一家国外域名注册商和网站托管公司,成立于2000年,提供域名注册、虚拟主机、电子邮件托管、SSL证书、免费的WHOIS保护、CDN、VPS主机和独立服务器。Namecheap怎么样?在Namecheap中注册、购买域名也是不需要备案的,价格方面相对于Namesilo来说也会便宜许多,操......
  • C129 并查集+01背包 P1455 搭配购买
    视频链接:C129并查集+01背包P1455搭配购买_哔哩哔哩_bilibili  E08【模板】背包DP01背包_哔哩哔哩_bilibiliP1455搭配购买-洛谷|计算机科学教育新生态(luogu.com.cn)//并查集+01背包#include<iostream>#include<cstring>#include<algorithm>usingname......