摘要:
题意 给定一个序列,进行$k$次操作,每次操作将会分割序列。 对于每次操作,可以选择将任意一个区间在任意点分割开,得到左侧和乘以右侧和的收益。 求收益最大值。 思路 子状态$f[i][k]$表示前$i$个数割$k$次最大收益。 推出方程为$f[i][k]=max(f[j][k 1]+sum[j] ( 阅读全文
摘要:
题意 有一个序列,要求将其分为任意部分。对于每一部分,其值为$at^2+bt+c$,其中$t$为这一部分元素总和,$a,b,c$给定。 思路 容易推出状态转移方程为$f[i]=min(f[j]+a (sum[i] sum[j])^2+b (sum[i] sum[j])+c)$ 朴素转移的时间复杂度为 阅读全文
摘要:
题意 平面上最开始只包含3个点,然后还会依次出现N个点。每新增一个点,请你求出包含这些点的周长最小的多边形的面积。 思路 采用平衡树维护,每次插入寻找前驱和后继,然后添加节点即可。 注意本题有可能会出现三点共线的情况,可以通过随机指定初始点来解决。 精度略有毒瘤之处。 代码 cpp include 阅读全文
摘要:
题意 给定一个序列,对于每一项有两种操作: 操作1:放置一个守卫塔,耗费$a_i$ 操作2:放置一个木偶,耗费为与右侧第一个守卫塔之间的距离。 求最小耗费。 思路 子状态$f[i]$表示在$i$ 状态转移方程显然为$f[i]=min(f[j]+a[i]+(i j) (i j 1)/2)$。 复杂度为 阅读全文