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

Sol
1.发现对于每个城市,小A和小B的选择是固定的,可以预处理出来,分别记为ga[],gb[]
2.并且,只要知道了出发城市和出发天数,那么当前城市和小A,小B各行驶的路程也是一定的,同样可以分别预处理出来
具体怎么预处理:
1.其实就是"邻值查找"
简单讲一下,就是把所有城市的高度都存进set排好序,然后ga[i]一定是在set里与h[i]相邻的中最近的的,gb[i]是与h[i]相邻的中次近的
2.倍增优化:
1) 设$p[i][j][k]$表示从城市j出发,k第一个开车(k=0表示A,k=1表示B),已经行驶了2i天所到达的城市
$p[0][j][1]=ga[j],p[0][j][0]=gb[j] $
$i=1时,p[1][j][k]=p [0] [p[0][j][k]] [1-k]$
$i>1时,p[i][j][k]=p[i-1] [p[i-1][j][k]][k]$
2)设$a[i][j][k]$表示......小A行驶的路程
$a[0][j][0]=dis(j,ga[j]),a[0][j][1]=0$
$i=1时,a[1][j][k]=a[0][j][k]+a[0][p[0][j][k]][1-k]$
$i>1时,a[i][j][k]=a[i-1][j][k]+a[i-1][p[i-1][j][k]][k]$
3)设$b[i][j][k]$表示......小B....
和小A类似...
询问1:枚举出发城市,倒序枚举2的整数次幂保证总路程小于等于X
询问2:直接倒序枚举2的整数次幂保证总路程小于等于X即可
Code
太难写了咕咕咕$qwq$
随机推荐
- Python中的生成器(generator)
生成器: 在函数内部包含yield关键字,那么该函数执行的结果就是生成器(生成器即是迭代器) yield的功能:1.把函数的执行结果做成迭代器(帮函数封装好__iter__(),__next__()方 ...
- Data Flow-File Read-基本过程
- Project Euler Problem 12-Highly divisible triangular number
最直接的想法就是暴力搞搞,直接枚举,暴力分解因子.再好一点,就打个素数表来分解因子.假设num=p1^a1p2^a2...pn^an,则所有因子个数为(a1+1)(a2+1)...(an+1). 再好 ...
- javascript 容易混淆遗忘的基础知识
1. 标识符 所谓标识符,就是指变量.函数.属性的名字,或者函数的参数.标识符可以是按照下列格式规则组合起来的一或多个字符: 1.1 第一个字符必须是一个字母.下划线( _ )或 ...
- H3C MDI/MDIX
- PyTorch之前向传播函数自动调用forward
参考:1. pytorch学习笔记(九):PyTorch结构介绍 2.pytorch学习笔记(七):pytorch hook 和 关于pytorch backward过程的理解 3.Pytorch入门 ...
- 2002年NOIP普及组复赛题解
题目涉及算法: 级数求和:入门题: 选数:搜索: 产生数:搜索.高精度: 过河卒:动态规划. 级数求和 题目链接:https://www.luogu.org/problemnew/show/P1035 ...
- springboot activiti工作流简单示例
最近一直研究springboot,根据工作需求,工作流需要作为一个单独的微服务工程来提供给其他服务调用,现在简单的写下工作流(使用的activiti)微服务的搭建与简单使用 jdk:1.8 数据库:m ...
- vector容器、
一. vector 向量容器1. 创建 vector 对象(1)不指定容器大小vector<int> V;(2)指定容器大小vector<int> V(10);(3) ...
- Python--day38---进程间通信--初识队列(multiprocess.Queue)
初识队列: 进程间通信IPC(Inter-Process Communication) 1,队列的方法: q = Queue(5)1,q.put(1) #把1放进队列 2,print(q.full() ...