当前位置: 首页 > news >正文

哈尔滨速成网站建设网站后台为什么传不上图片

哈尔滨速成网站建设,网站后台为什么传不上图片,网站制作技术使用说明,网页制作工具大全一家新的餐馆开业了,为了吸引更多的顾客,每样餐品都有打折的活动。特别的,餐馆内一共有𝑛样菜品,编号从 1 1 1 到 n n n,每样菜品每人最多只能点一次。对于第 i i i 种菜品,其包含两种价格&a…

一家新的餐馆开业了,为了吸引更多的顾客,每样餐品都有打折的活动。特别的,餐馆内一共有𝑛样菜品,编号从 1 1 1 n n n,每样菜品每人最多只能点一次。对于第 i i i 种菜品,其包含两种价格:活动价格 a i a_i ai 与差价 b i b_i bi

假设某顾客点了 k k k 样菜品,依次编号为 p 1 , … , p k p_1,\dots,p_k p1,,pk,那么最终需要支付的价格为
∑ i = 1 k a p i + max ⁡ i = 1 k b p i \sum\limits_{i=1}^ka_{p_i}+\max_{i=1}^kb_{p_i} i=1kapi+i=1maxkbpi

现在有 n n n 名顾客光顾这家餐馆,第 i i i 名顾客想恰好点 i i i 样菜品,请帮助每位顾客计算出他的最小花费。

n ≤ 2 × 1 0 5 n\le2\times10^5 n2×105


先把菜品按 b b b 从小到大排序,如果当前要点 k k k 个菜,选定第 i i i 个菜,那么就是要在前 i − 1 i-1 i1 个菜中选 k − 1 k-1 k1 个菜。

可以用 set 维护,或者主席树,时间复杂度 O ( n 2 log ⁡ n ) O(n^2\log n) O(n2logn),这是暴力。

w ( k , i ) w(k,i) w(k,i) 表示前 i i i 个菜中选 k k k 个菜的最小花费, f ( k ) f(k) f(k) 为使 w ( k , i ) w(k,i) w(k,i) 取得最小值的 i i i

考虑决策 x < y x<y x<y,若 w ( k , x ) ≥ w ( k , y ) w(k,x)\ge w(k,y) w(k,x)w(k,y),增大 k k k y y y 可选的菜品比 x x x 的多,所以 ∀ k ′ ∈ ( k , n ] , w ( k ′ , x ) ≥ w ( k ′ , y ) \forall k'\in(k,n],w(k',x)\ge w(k',y) k(k,n],w(k,x)w(k,y),若 y = f ( k ) y=f(k) y=f(k),则对于后面的决策点 m m m w w w 值至少都比前面的要小了,所以 f ( k ) ≤ f ( m ) f(k)\le f(m) f(k)f(m),即 f ( 1 ) ≤ f ( 2 ) ≤ ⋯ ≤ f ( n ) f(1)\le f(2)\le\dots\le f(n) f(1)f(2)f(n),决策具有单调性。

如果这是 DP,就可以用 1D/1D 动态规划的优化方法 O ( n log ⁡ n ) O(n\log n) O(nlogn) 拿下。但是这不是。

这里要用分治的思想,函数 s o l v e ( l , r , L , R ) solve(l,r,L,R) solve(l,r,L,R) 表示当前处理到区间 [ l , r ] [l,r] [l,r] m i d mid mid 的最优决策点在 L , R L,R L,R。每次暴力求出 p o s = f ( m i d ) pos=f(mid) pos=f(mid),把问题分成 s o l v e ( l , m i d − 1 , L , p o s ) solve(l,mid-1,L,pos) solve(l,mid1,L,pos) s o l v e ( m i d + 1 , r , p o s , R ) solve(mid+1,r,pos,R) solve(mid+1,r,pos,R) 两部分,这样递归处理下去。

求一个 w w w O ( log ⁡ V ) O(\log V) O(logV) 的,总的时间复杂度为 O ( n log ⁡ n log ⁡ V ) O(n\log n\log V) O(nlognlogV)。( V V V 是值域)

代码如下

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll INF=1e18,Inf=1e9;
const int N=2e5+1;
int n,A[N],cnt,rt[N];
ll ans[N];
struct node
{int a,b;bool operator<(const node &a)const{return b<a.b;}
}a[N];
struct Node
{int ls,rs,sz;ll sum;
}tr[N*32];
void insert(int &rt,int la,int l,int r,int x)
{rt=++cnt;tr[rt]=tr[la];tr[rt].sz++;tr[rt].sum+=x;if(l==r) return;int mid=l+r>>1;if(x<=mid) insert(tr[rt].ls,tr[la].ls,l,mid,x);else insert(tr[rt].rs,tr[la].rs,mid+1,r,x);
}
ll query(int rt,int l,int r,int k)
{if(l==r) return k*l;int mid=l+r>>1,sum=tr[tr[rt].ls].sz;if(sum>=k) return query(tr[rt].ls,l,mid,k);else return query(tr[rt].rs,mid+1,r,k-sum)+tr[tr[rt].ls].sum;
}
void solve(int l,int r,int L,int R)
{if(r<l) return;int mid=l+r>>1,pos;ll sum=INF;for(int i=max(mid,L);i<=R;i++){ll x=a[i].b+a[i].a+query(rt[i-1],0,Inf,mid-1);if(sum>x){sum=x;pos=i;}}ans[mid]=sum;solve(l,mid-1,L,pos);solve(mid+1,r,pos,R);
}
int main()
{freopen("order.in","r",stdin);freopen("order.out","w",stdout);scanf("%d",&n);for(int i=1;i<=n;i++) scanf("%d%d",&a[i].a,&a[i].b);sort(a+1,a+1+n);for(int i=1;i<=n;i++) insert(rt[i],rt[i-1],0,Inf,a[i].a);solve(1,n,1,n);for(int i=1;i<=n;i++) printf("%lld\n",ans[i]);
}
http://www.yayakq.cn/news/752925/

相关文章:

  • 如何做导购网站橘子皮主题wordpress
  • 网站的网站建设公司京东这样的网站怎么做
  • 赤峰建设局网站自媒体运营主要做什么
  • 免费网站制作范例西安seo关键词排名
  • wordpress多站点注册页建设工程信息网官网入口查询
  • 做好的网站怎么发布网站搭建实训报告
  • 网上做网站赚钱吗用qq空间做网站
  • 北京商城网站设计报价wordpress前台浏览量插件
  • 企业建设营销网站的基本步骤有哪些手机优化怎么关闭
  • 用邮箱做网站做mip网站需要多钱
  • 怎么做集团网站网络购物商城网站建设
  • 以前老网站兼职做设计什么网站好
  • p2p网站建设要点网站建设和续费
  • wix做的网站 网址是什么网页制作与网站建设技术大全 pdf
  • 上海网站制作服务我要外包网站
  • wap音乐网站源码学做网站用谁的书
  • 娱乐手机网站开发沈阳企业网站开发
  • 美容加盟的网站建设wordpress小论坛小程序
  • 网站连接数据库失败wordpress安装不上
  • 如何建立自己的论坛南京做网站优化价格
  • 公司网站彩页怎么做公路水运建设质量与安全监督系统网站
  • 哪个公司做公司网站好加强网站建设的建议
  • 安徽建新建设工程有限公司网站网络优化的内容有哪些
  • 做自媒体网站陵水网站建设费用
  • 赣州律师网站建设重庆互联网
  • 西数网站助手旧房改造找哪家
  • 网站一定要备案吗青海省高等级公路建设管局网站
  • 贵阳建站模板wordpress 链接跳转
  • 计算机应用技术php网站开发哪个网站的pc端是用vue做的
  • windows 网站开发上海公关公司排名