练习:
HDU3507 斜率优化DP例题 1.5
HDU2993 同例题,定义s[i]=a1+a2+...+ai,f[i]= 其实是个斜率,如果点i为(i,s[i]),那就是i、j两点间的斜率 具体点的文件夹里有 2.5 超级无语,hdu有问题,谁都TLE,读入优化都过不了,不过可以先学一下读入优化(我代码打了),我只好自己出了数据....注意细节!
HDU3045 先对n个数进行排序,则可以分析出分组成员一定是连续的 排个序之后就知道f[i]=min(f[j]+s[i]-s[j+1]-(i-j)*a[j+1]) 自己变式 3
HDU3480 我尽量没有简化题意目的就是为了让你发现很明显的事实:一个数只会出现一次 所以进行排序之后用斜率优化做就好了 3 做法上差不多,也就是变成了二维而已
bzoj1010 "dp[i]=min(dp[j]+(sum[i]-sum[j]+i-j-1-L)^2) (j<i)
令f[i]=sum[i]+i,c=1+l
则dp[i]=min(dp[j]+(f[i]-f[j]-c)^2)" 3.5 过程略烦,细心点,hzw大神写的很好,有不懂地方就去看看
http://hzwer.com/2114.html
HDU2829 定义dp[i][j]表示将前j个数分成i组所得到的价值,sum[i]表示前i个数之和,w[i]表示前i个数分成一组的价值,最后化简结果就是 dp[i][j]=min{dp[i-1][k] - w[k] + sum[k]*sum[k] - sum[k]*sum[j]} + w[j] (i-1<=k<j). 3.5 一样的,列出方程,转化为斜率优化的样子搞就好了,我没给一开始的方程以及化简,就是让你自己要亲自列出来然后化简一下啊(就是过程烦了点)
bzoj1096 方法一样,方程这次自己写吧~(自己列才有锻炼意义) 4 实在不行再找题解吧