对于只考虑首位状态的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. ubuntu podman相关

    前言 记录podman的安装.配置以及一些常用操作,会不定时更新: 正文 1. podman 安装以及配置 ubuntu 安装 podman sudo apt update sudo apt inst ...

  2. ubuntu16.04 python2&3 pip升级后报错:sys.stderr.write(f"ERROR: {exc}")

    ubuntu16.04 python2&3 pip升级后报错: sys.stderr.write(f"ERROR: {exc}") 描述 最近使用ubuntu16.04上的 ...

  3. vue-模块工程化-手稿

  4. mac svn管理工具

    App Store中搜索snailsvn 分付费(98元)和免费试用

  5. yb课堂 前端项目目录结构创建和讲解 《三十三》

    安装包 cnpm install node-sass --save-dev 启动项目:cnpm run serve 目录结构介绍 创建新目录:api/route/views 默认资源文件介绍 asse ...

  6. 安装PHP拓展

    win环境下: php扩展下载地址:http://pecl.php.net/ 需要知道:  php版本,操作系统位数,线程是否安全.想要知道这3个,在php中输入.如下图所示:phpinfo();di ...

  7. webpack4.15.1 学习笔记(三) — 模块热替换HMR

    目录 模块热替换 HMR HMR监听文件变化 HMR 修改样式表 模块热替换 HMR 允许在运行时更新各种模块,而无需进行完全刷新.不适用于生产环境,意味着应当只在开发环境使用.启用HMR实际上就是更 ...

  8. el-config-provider

    el-config-provider是Element Plus库中的一个组件,用于提供全局的配置.它是Element Plus在2.0版本中引入的新组件. el-config-provider组件的作 ...

  9. Error: Dynamic require of "path" is not supported

    failed to load config from D:\BaiduSyncdisk\vue3\sys-manager\vite.config.jserror when starting dev s ...

  10. [oeasy]python0104_指示灯_显示_LED_辉光管_霓虹灯

    编码进化 回忆上次内容 x86.arm.riscv等基础架构 都是二进制的 包括各种数据.指令   但是我们接触到的东西 都是屏幕显示出来的字符   计算机 显示出来的 一个个具体的字型   ​   ...