专栏文章

题解:P11678 [USACO25JAN] Watering the Plants P

P11678题解参与者 2已保存评论 2

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
2 条
当前快照
1 份
快照标识符
@minlnqfs
此快照首次捕获于
2025/12/02 04:26
3 个月前
此快照最后确认于
2025/12/02 04:26
3 个月前
查看原文
对一个位置浇水会影响到其相邻的水量,因此令 fi,jf_{i,j} 代表考虑到 [1,i][1,i],前 ii 个位置都浇完水且向 i+1i+1 额外 贡献了 jj 的水量的最小代价,再令 gi,jg_{i,j} 代表 ff 的后缀 min\min,即 gi,j=minkjfi,kg_{i,j}=\min\limits_{k\ge j}f_{i,k},则第 ii 个位置的答案为 gi1,wig_{i-1,w_i}
转移为 fi,j=minj+kwifi1,k+cijf_{i,j}=\min\limits_{j+k\ge w_i}f_{i-1,k}+c_ij,即 fi,j=gi1,max(0,wij)+cijf_{i,j}=g_{i-1,\max(0,w_i-j)}+c_ij。直接做是 O(nV)O(nV) 的,考虑优化。
使用整体 dp 维护 gi,jg_{i,j},重新写一下 fif_{i} 的转移:对于 jwij\le w_ifi,j=gi1,wij+cijf_{i,j}=g_{i-1,w_i-j}+c_ij,这等价于将原来 [0,wi][0,w_i]gg 值翻转,然后加上斜率为 cic_i 的线段;对于 j>wij>w_ifi,j=gi1,0+cijf_{i,j}=g_{i-1,0}+c_ij,这等价于将原来 [wi+1,V][w_i+1,V] 区间推平,然后加上斜率为 cic_i 的线段。由于维护的是 gg,因此最后还需要对每个后缀 chkmin。
前面几个操作可以上平衡树,对于加斜率为 cic_i 的线段,我们不妨转换一步,维护 gi,j=gi,jgi,j1g'_{i,j}=g_{i,j}-g_{i,j-1}gg 的差分,这样就变成区间加了;对于区间翻转,转换为先区间和求出翻转后最靠前的位置,然后翻转 [l+1,r][l+1,r] 再整体取相反数即可。需要分别维护区间加、区间乘、区间推平、区间翻转。但是最后一个操作后缀 chkmin 还没有解决,这个基本上不太好从数据结构上优化,考虑一些 slope trick:事实上经过整体 dp 的转换不难证明 ff 的下凸性,即 gg 的差分数组具有单调性。于是 chkmin 一次后我们维护的东西一定是一个平台加上一段单调的区间,可以每次按值分裂出拐点,然后前缀推平即可。
复杂度 O(nlogV)O(n\log V),需要大力卡常。

评论

2 条评论,欢迎与作者交流。

正在加载评论...