-
题目链接 题意:已知 f(1, j) = a[j] f[i][j] = min (f[i-1][j],f[i-1][j-1]) 然后给出 n n≤1E5 个数(a[i] ai≤1E4),给出 m组查询(m<=1E5),每组两个数 x,y 问 f(x,y) 是多少。 参考题解:茶姐的回答(下标好像搞错了,领会意思即可 官方题解 以及前置技能点是:斜率优化+线段树 思路:考虑一排数a[1]到a[n],原问题可以转化成从a[y]走x-1步,每一步原地不动或者向左移动一个格子后的总的代价。 Function is calculated as follows: , k__i — how many times we …
Read More -
题目链接 题意:n个数,分成若干段,每段的代价为 ,求最小代价。 思路:dp。 状态方程很显然个鬼。。。 dp[i] 表示处理完前面i个数的最小代价。 dp[0] = 0 ; dp[i] = min(dp[j]+(sum[i]-sum[j])^2) ( 0<j <i),sum[i]为a[i]的前缀和。 这复杂度是n^2的。。。然而n最大5E5.....boom.... 斜率优化登场! 这篇博客讲得非常好 我们假设k两边移项一下,得到:(dp[j]+num[j]^2-(dp[k]+num[k]^2))/(2*(num[j]-num[k]))<sum[i]。我们把dp[j]-num[j]^2看做是yj, …
Read More -
浅谈数形结合思想在信息学竞赛中的应用 参考博客 这个东西英文好像叫做:convex hull trick Convex_hull_trick_wiki codeforces convex hull trick 简单说说我的理解:斜率优化是一种数形结合的思想。。。 对于一个dp的若干状态。。。有些状态是不会对答案有贡献的。。。这些我们就可以不考虑。。。 简单地说。。。如果把状态的下标和状态对应成二维平面的点。。。 凸起来的点一定不会影响答案。。。 具体证明参考论文。。。。。 也就是维护一个"下凸折线" 具体维护的办法是用单调队列来维护。。。 感觉还是挺简单的。。。。
Read More