摘要:
pre:在网格中,凸多边形可以按行(row)分解成若干段连续的区间 [ l , r ] ,且左端点纵坐标的值(col)满足先减后增,右端点纵坐标先增后减。 阶段:根据这个小发现,可以将阶段设置成每一行,因此,解决这个问题一共需要N个阶段。 状态:除了阶段外,表示每一个状态还需要记录下当前阶段下一共选 阅读全文
摘要:
模拟退火是一种求函数最值问题的随机算法。 给定一个函数的某一初始坐标,可以拟定一个“温度”(这里主要是借用退火的物理意义),这里的温度可以理解成自变量可以取值的范围。之后在当前最优解对应的自变量的基础上, 随机产生一组附加量 ,用当前自变量加上附加量构成一个新的点,计算该点的函数值,若该点函数值比最 阅读全文
摘要:
题目大意:维护动态带修改最大子段和。 题解:线段树额外维护合并最优解时需要的信息。 代码如下 update at 2019.3.17 阅读全文
摘要:
学到了一个引理:在满足S最小化的条件下,一定存在一种构造序列B的方案,使得序列B中的数值都来自于A中。(数学归纳法+中位数定理得证) 对于状态的表示来说,首先肯定有一个 i ,表示选到了第 i 个数时对应的最优解,由于需要维护序列单调性,因此需要再在状态中加入一个因素 j ,表示在第 i 位选了离散 阅读全文
摘要:
这道题需要支持区间修改和区间询问,因此采用线段树加以维护。 由于求的是开着的灯的数目,因此维护sum:区间[ l , r ]中开着的灯的数目。 tag取做0/1,表示区间是否反转,在进行标记下传时,如果tag=1,则下传,否则返回。(tag的选取一般跟操作有关) 代码如下: 阅读全文
摘要:
题中给出了第 i 头牛前面有多少比它矮,如果正着分析比较难找到规律。因此,采用倒着分析的方法(最后一头牛的rank可以直接得出),对于第 i 头牛来说,它的rank值为没有被占用的rank集合中的第A[i]+1大数。所以,采用树状数组维护0 1序列(表示是否被占用)的前缀和,每次再用二分得出第K大数 阅读全文
摘要:
按照每一行每一列去填数,当填到每一行的第9列时,开始填下一行。 代码如下: cpp include include include include define cls(a,b) memset(a,b,sizeof(a)) using namespace std; char s[10][10]; i 阅读全文
摘要:
题目中有一个重要的信息是:每一种灯泡只能换成比它电压更大的灯泡,因此电压的大小限制了状态的转移。因此,在这里按照电压从小到大把每种灯泡排序,使得在考虑后面的灯泡时,前面的灯泡自然可以换成后面的灯泡。状态转移方程为$dp[i]=max(dp[j]+(s[i] s[j]) c[i]+k[i]),j\in 阅读全文
摘要:
对于在整数域上的二分答案问题的输出一般情况下是不会出现问题的,因为不会涉及到精度和类型转换。 但是对于在实数域上的二分时,可能出现一些奇奇怪怪的问题。 例题:POJ2018 1. 这道题是一个实数域上的二分,但是让输出的是整数。 2. 首先,对于在实数域上的二分来说,答案是会有无法避免的误差的,无论 阅读全文