题意:
有n个玩具,要将它们分为若干组,玩具同宽同高,但长度C可能不同。给出n个玩具的摆放顺序,连续的任意多个玩具都可以成为一组。区间[i,j]成为一组的费用是cost=(j-i+Sigma(Ck)-L)2且i<=k<=j。给定n和L和每个玩具的长度,问分组后费用总和是多少? (n<=5*104)。
思路:
注:费用并非是直线的函数,每个组的总长度+玩具数量越接近L越好。
转移方程:dp[i]=min( dp[j]+(sum[i]-sum[j]+i-j+1-L)2 )。sum[i]表示前i件玩具长度的总和,0<j<i,(i-j+1)表示与i同组的玩具个数。
根据方程是可以推出这题是满足决策单调性的。以下是抄来的证明,稍微修改:
令f[i]=sum[i]+i, c=1+L,则dp[i]=min( dp[j]+(f[i]-f[j]-c)2 )
1.证明决策单调性
假设在状态i处的k决策优于j决策,且j<k,那么 dp[k]+(f[i]-f[k]-c)2<=dp[j]+(f[i]-dp[j]-c)2。
而对于i后面的某个状态t,设f[t]=f[i]+v,先不管v是多少。
要证明:dp[k]+(f[t]-f[k]-c)2<=dp[j]+(f[t]-f[j]-c)2
只要证(将f[t]=f[i]+v代入):dp[k]+(f[i]+v-f[k]-c)2<=dp[j]+(f[i]+v-f[j]-c)2
只要证dp[k]+(f[i]-f[k]-c)2+2v*(f[i]-f[k]-c)+v2 <= dp[j]+(f[i]-f[j]-c)2+2v*(f[i]-f[j]-c)+v2。
由于假设,所以只要证: 2v*(f[i]-f[k]-c)<=2v*(f[i]-f[j]-c)。
即证:f[k]>=f[j](显然)
证明完毕