[NOI2011]Noi嘉年华
题解:
思路挺水的一道题
首先肯定将时间离散化排序后考虑
然后预处理出ff[i][j]表示从i-j时刻,被包含了多少值
令f[i][j]表示进行到i时刻,A中的个数是j,B中的个数的最大值
转移也挺显然,就是枚举决策 时间n^3
这样第一问就解决了
考虑第二问
会发现就等价于求min(x+y+ff[i][j],f[i][x]+g[j][y]) (其中i<begin,j>end) 其实ff[i][j]也可以加到后面这项,但是因为他们是对称的所以已经算过了
这样暴力求解是n^4的
考虑如何优化
1.n^3logn,这个比较显然
当x确定时,显然x+y+ff[i][j]随y+而+,而f[i][x]+g[j][y]随y+而-
那么二分y找到两个单调函数的交点就可以了
2.n^3(是看了题解才知道的。。发现真是很智障。。2d2d的优化见得太少了)
其实上面这个已经很接近了,只是把结论强化一下
我们假设左边为x时右边的最优解为y,那么当左边为x+1时,y一定是不增的
这样显然是n^3的
意识流证明的话就是既然你min(x+y+ff[i][j],f[i][x]+g[j][y])>=min(x+y+1+ff[i][j],f[i][x]+g[j][y+1])
那么当x+1时,min(x+y+1+ff[i][j],f[i][x+1]+g[j][y])>=min(x+y+2+ff[i][j],f[i][x+1]+g[j][y+1])
因为这时的min是等于后面这一项的