题面:
传说,数千年前圣帕特里克消灭了哞尔兰所有的蛇。然而,蛇们现在卷土重来了!圣帕特里克节是在每年的3月17日,所以Bessie要用彻底清除哞尔兰所有的蛇来纪念圣帕特里克。
Bessie装备了一个捕网,用来捕捉 NN 组排成一行的蛇( 1 \leq N \leq 4001≤N≤400 )。Bessie必须按照这些组在这一行中出现的顺序捕捉每一组的所有蛇。每当Bessie抓完一组蛇之后,她就会将蛇放在笼子里,然后带着空的捕网开始捕捉下一组。
一个大小为 ss 的捕网意味着Bessie可以抓住任意包含 gg 条的一组蛇,其中 g \leq sg≤s 。然而,每当Bessie用大小为 ss 的捕网抓住了一组 gg 条蛇,就意味着浪费了 s-gs−g 的空间。Bessie可以任意设定捕网的初始大小,并且她可以改变 KK 次捕网大小( 1 \leq K<N1≤K<N )。
请告诉Bessie她捕捉完所有组的蛇之后可以达到的总浪费空间的最小值。
显然是DP......
然而考场写了个假算法,$O(n^3*m)$的DP,而且毒瘤出题人并没有具体的数据范围,只给了一个n<=400...
考场上$O(n^3*m)$的算法拿了48pts;
由于常数的问题是所有打部分分的人里面得分最高的;
然而出考场用了毒瘤方法卡常后拿了70+pts(在Luogu上甚至拿了80pts)
先贴个假算法:
令$f[i][j][k]$表示当前在抓第$i$堆蛇,从$i$开始到$i+j-1$堆蛇都用一种背包大小抓,已经用了k个蛇袋子;
显然这里要用$[i,i+j-1]$中的最大值来抓这个区间内所有的蛇;
不难得到转移方程:$$f[i][j][k]=min{f[p][i-p][k-1]}+Max(i,i+j-1)*j-(sum[i+j-1]-sum[i-1])$$
其中$Max(l,r)$表示区间$[l,r]$中$a[]$的最大值,$sum[i]$为$a[]$的前缀和