对于只考虑首位状态的DP,考虑用倍增优化

P1081 开车旅行

https://www.luogu.org/problemnew/show/P1081

 1 const int N=100005;
2 struct node{int x,y;};
3 il bool operator <(node a,node b){return a.y<b.y;}
4 typedef set<node> st;
5 typedef st::iterator itr;
6 st s;itr it,lt,rt;
7 int ii,ga[N],gb[N],t,f[18][N][2],g[10],m,h[N],n,ans;
8 ll ansA,ansB,a[18][N][2],b[18][N][2],A,B;
9
10 il bool cmp(int a,int b)
11 {
12 return abs(h[a]-h[ii]) < abs(h[b]-h[ii]) || (abs(h[a]-h[ii]) == abs(h[b]-h[ii]) && h[a]<h[b]);
13 }
14
15 il void pre()
16 {
17 n=rd();
18 FOR(i,1,n) h[i]=rd();
19 for(ii=n;ii;--ii)
20 {
21 node p=(node){ii,h[ii]};
22 s.insert(p);
23 it=s.find(p);
24 lt=it,rt=it,m=0;
25 if(lt!=s.begin()) lt--,g[++m]=lt->x;
26 if(lt!=s.begin()) lt--,g[++m]=lt->x;
27 if(rt++,rt!=s.end())
28 {
29 g[++m]=rt->x;
30 if(rt++,rt!=s.end()) g[++m]=rt->x;
31 }
32 sort(g+1,g+m+1,cmp);
33 if(m) gb[ii]=g[1];
34 if(m>1) ga[ii]=g[2];
35 }
36 }
 1 il void work()
2 {
3 FOR(i,1,n)
4 {
5 if(ga[i]) f[0][i][0]=ga[i],a[0][i][0]=abs(h[ga[i]]-h[i]);
6 if(gb[i]) f[0][i][1]=gb[i],b[0][i][1]=abs(h[gb[i]]-h[i]);
7 }
8 t=(int)(log(n*1.0)/log(2.0)+0.001);
9 FOR(i,1,t) FOR(j,1,n) FOR(k,0,1)
10 {
11 int l;
12 if(i==1) l=k^1; else l=k;
13 if(f[i-1][j][k]) f[i][j][k]=f[i-1][f[i-1][j][k]][l];
14 if(f[i][j][k])
15 {
16 a[i][j][k]=a[i-1][j][k]+a[i-1][f[i-1][j][k]][l];
17 b[i][j][k]=b[i-1][j][k]+b[i-1][f[i-1][j][k]][l];
18 }
19 }
20 }
 1 il void solve(int s,int x0,ll &A,ll &B)
2 {
3 A=B=0;int k=0;
4 For(i,t,0)
5 if(f[i][s][k]&&a[i][s][k]+b[i][s][k]<=x0)
6 {
7 x0-=a[i][s][k]+b[i][s][k];
8 A+=a[i][s][k],B+=b[i][s][k];
9 if(i==0) k^=1;
10 s=f[i][s][k];
11 }
12 }
13
14 il void print()
15 {
16 int x0=rd();
17 ansA=1,ansB=0;
18 FOR(i,1,n)
19 {
20 solve(i,x0,A,B);
21 if(!B) A=1;
22 if(A*ansB < B*ansA || (A*ansB==B*ansA && h[i]>h[ans])) ansA=A,ansB=B,ans=i;
23 }
24 printf("%d\n",ans);
25 m=rd();
26 FOR(i,1,m)
27 {
28 int x=rd(),y=rd();
29 solve(x,y,A,B);
30 printf("%lld %lld\n",A,B);
31 }
32 }
33
34 int main()
35 {
36 pre();
37 work();
38 print();
39 return 0;
40 }

倍增优化DP的更多相关文章

  1. HZOJ 20190727 随(倍增优化dp)

    达哥T1 实际上还是挺难的,考试时只qj20pts,还qj失败 因为他专门给出了mod的范围,所以我们考虑把mod加入时间复杂度. $50\%$算法: 考虑最暴力的dp,设$f[i][j]$表示进行$ ...

  2. $Noip2012\ Luogu1081$ 开车旅行 倍增优化$ DP$

    Luogu Description Sol 1.发现对于每个城市,小A和小B的选择是固定的,可以预处理出来,分别记为ga[],gb[] 2.并且,只要知道了出发城市和出发天数,那么当前城市和小A,小B ...

  3. CodeForces - 1175E Minimal Segment Cover (倍增优化dp)

    题意:给你n条线段[l,r]以及m组询问,每组询问给出一组[l,r],问至少需要取多少个线段可以覆盖[l,r]区间中所有的点. 如果贪心地做的话,可以求出“从每个左端点l出发选一条线段可以到达的最右端 ...

  4. $CH0601\ Genius\ ACM$ 倍增优化DP

    ACWing Description 给定一个长度为N的数列A以及一个整数T.我们要把A分成若干段,使得每一段的'校验值'都不超过N.求最少需要分成几段. Sol 首先是校验值的求法: 要使得'每对数 ...

  5. 0x57 倍增优化DP

    真的是下定了巨大的决心来搞这一讲,果不其然耗了一晚上 开车旅行(真的是NOIP的题吗怎么这么恐怖) 首先,先用set把小A和小B从城市i出发,到达的下一个城市预处理出来. f[i][j][k]表示走了 ...

  6. POJ 1014 Dividing(多重背包, 倍增优化)

    Q: 倍增优化后, 还是有重复的元素, 怎么办 A: 假定重复的元素比较少, 不用考虑 Description Marsha and Bill own a collection of marbles. ...

  7. Codeforces 356D 倍增优化背包

    题目链接:http://codeforces.com/contest/356/problem/D 思路(官方题解):http://codeforces.com/blog/entry/9210 此题需要 ...

  8. 矩阵乘法优化DP复习

    前言 最近做毒瘤做多了--联赛难度的东西也该复习复习了. Warning:本文较长,难度分界线在"中场休息"部分,如果只想看普及难度的可以从第五部分直接到注意事项qwq 文中用(比 ...

  9. bzoj-4518 4518: [Sdoi2016]征途(斜率优化dp)

    题目链接: 4518: [Sdoi2016]征途 Description Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到达T地 ...

  10. bzoj-1096 1096: [ZJOI2007]仓库建设(斜率优化dp)

    题目链接: 1096: [ZJOI2007]仓库建设 Description L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶,工厂N在山脚.由于这座山处于高原内陆地区(干燥少雨),L ...

随机推荐

  1. GIS数据获取:土地利用与土壤属性、DEM、水体水系数据

      本文对目前主要的土壤属性.地表覆盖.数字高程模型与水体水系矢量数据获取网站加以整理与介绍.   本文为"GIS数据获取整理"专栏中第三篇独立博客,因此本文全部标题均由" ...

  2. nginx 反向代理(proxy)与负载均衡(upstream)应用实践

    集群介绍 集群就是指一组(若干个)相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各自服务的独立服务器.这些服务器之间可以彼此通信,协同向 ...

  3. Python 引用不确定的函数

    在Python中,引用不确定的函数通常意味着我们可能在运行时才知道要调用哪个函数,或者我们可能想根据某些条件动态地选择不同的函数来执行.这种灵活性在处理多种不同逻辑或根据不同输入参数执行不同操作的场景 ...

  4. vue - ElementUI

    关于ElementUI最好还是通过实践项目来做,来熟悉. 这只是一些ElementUI的注意事项,至此vue2的内容真的全部完结,后面将继续vue3的内容更新. 一.完整引入 一般提及什么什么UI会有 ...

  5. VS2017 error CS0234: 命名空间“Microsoft”中不存在类型或命名空间名“Office”问题的一种解决方案

    最近需要使用VS2017编辑C#,但在编译时软件报错:error CS0234: 命名空间"Microsoft"中不存在类型或命名空间名"Office" 在网上 ...

  6. yb课堂之跨域配置 《二十三》

    CorsInterceptor.java package net.ybclass.online_ybclass.interceptor; import org.springframework.http ...

  7. 如何应对红帽不再维护 CentOS

    CentOS(Community Enterprise Operating System,社区企业操作系统)是一种开源的.免费的操作系统.由 Lance Davis 发起,通过社区驱动,目标是创建一个 ...

  8. P1681

    和上一道题差不多,要注意一些细节 #include<iostream> #include<utility> using namespace std; typedef long ...

  9. 国内版Unity 2023编辑器无法切换到DX12模式的解决方法

    2024.7.4更新:至6000.0.5f1c1,此问题已修复 在{安装目录}\Editor里(也就是Unity安装的根目录)建立一个名叫D3D12的文件夹. 去{安装目录}\Editor\Data\ ...

  10. 解读MySQL 8.0数据字典缓存管理机制

    背景介绍 MySQL的数据字典(Data Dictionary,简称DD),用于存储数据库的元数据信息,它在8.0版本中被重新设计和实现,通过将所有DD数据唯一地持久化到InnoDB存储引擎的DD t ...