动态规划--斜优化.docVIP

  • 2
  • 0
  • 约2.11万字
  • 约 14页
  • 2016-10-20 发布于广东
  • 举报
动态规划--斜优化

动态规划优化_斜率优化 先来看一道题(HDU3507): 题意:给出N个单词,每个单词有个非负权值Ci,将k个单词排在一行的费用为(∑Ci)^2+M.求最优方案,使得总费用最小. 我们很容易得到一个O(N^2)的算法: s[i]表示前i个单词的权值和. 先写个东西在这:所有元素非负的数组的前缀和值随下标增加单调递增.后面会用到. f[i]表示将前i个单词排版完毕后的最优值,f[i]=min{f[j]+(s[i]-s[j])^2+M}. 但题目中N的范围是500000.这个算法明显不行.考虑如何优化. 我们固定i,考虑它的两个一般决策点j,k(jk). 记g[pos]=f[pos]+(s[i]-s[pos])^2+M,即i从pos转移的代价. 如果决策点k优于j,那么就有g[k]g[j].展开来: f[k]+(s[i]-s[k])^2+Mf[j]+(s[i]-s[j])^2+M,化简得 f[k]-f[j]+s[k]^2-s[j]^22*s[i]*(s[k]-s[j]) 注意到s[k]s[j],我们在不等式两边除以(s[k]-s[j]). 不等式化为(f[k]-f[j]+s[k]^2-s[j]^2)/(s[k]-s[j])2*s[i]. 方便起见,我们将左边分式的分子分母同时变号. (f[j]-f[k]+s[j]^2-s[k]^2)/(s[j]-s[k])2*s[i]. 可以看到不等式

文档评论(0)

1亿VIP精品文档

相关文档