我的第二道斜率DP。

收获:

  1、假设两个位置:p<q<i,然后让某一位置优,看其满足什么性质,所谓斜率优化就是满足:

    (g[q]-g[p])/(f[q]-f[p])  op h[i]

    要化简成这样,必须满足f函数关于位置单调,否则op(<或>)的方向就会因为f的大小关系而变化,就没有凸的性质了。

  2、斜率优化很难调试,所以当发现暴力DP和同样的方程被斜率优化了一下的答案不同时,不要去调试,直接去检查上面的各个函数是否写错或抄到代码中抄错了,

    或者重推一遍。(注意决策点是否可能会重合)

 /**************************************************************
Problem: 1010
User: idy002
Language: C++
Result: Accepted
Time:116 ms
Memory:3148 kb
****************************************************************/ #include <cstdio>
#define ln(A,B) ((B)-(A))
#define maxn 50010 typedef long long lng; struct Vector {
lng x, y;
int id;
Vector(){}
Vector( lng x, lng y, int id ) : x(x), y(y), id(id) {}
Vector operator-( const Vector & b ) const {
return Vector( x-b.x, y-b.y, - );
}
lng operator&( const Vector & b ) const {
return x*b.y-y*b.x;
}
};
typedef Vector Point; int n, L;
int cost[maxn];
lng g[maxn], sum[maxn];
lng dp[maxn];
int beg, end;
Point qu[maxn]; inline lng sqr( lng a ) {
return a*a;
}
int main() {
scanf( "%d%d", &n, &L );
sum[] = ;
for( int i=; i<=n; i++ ) {
scanf( "%d", cost+i );
sum[i] = sum[i-]+cost[i];
g[i] = sum[i]+i;
}
dp[] = ;
qu[beg=end=] = Point( , , );
for( int i=; i<=n; i++ ) {
while( beg<end && (qu[beg+].y-qu[beg].y)<=(qu[beg+].x-qu[beg].x)**g[i] )
beg++;
int j = qu[beg].id; dp[i] = dp[j]+sqr(sum[i]-sum[j]-L+i-j-);
Point npt = Point( g[i], dp[i]+g[i]*g[i]+*g[i]*(L+), i );
while( beg<end && (ln(qu[end-],qu[end])&ln(qu[end-],npt))<= )
end--;
qu[++end] = npt; }
printf( "%lld\n", dp[n] );
}

最新文章

  1. java中cookie存取值
  2. Myeclipse反编译插件的安装
  3. Mina入门教程(二)----Spring4 集成Mina
  4. Android中实现全屏、无标题栏的两种办法
  5. Java验证码识别解决方案
  6. git基础知识总结
  7. 【剑指offer 面试题38】数字在排序数组中出现的次数
  8. (转载)OC学习篇之---Foundation框架中的NSObject对象
  9. windows系统安装ubuntu后,grub中没有windows启动项
  10. 关于odbc连接orcal,用户名密码大小写敏感问题
  11. Spring Boot 系列教程7-EasyUI-datagrid
  12. 不恰当的update语句使用主键和索引导致mysql死锁
  13. springboot 获取hibernate 的 SessionFactory
  14. C语言之成绩转换
  15. iOS下JS与OC互相调用(三)--MessageHandler
  16. Java开发笔记(二十三)数组工具Arrays
  17. 纪念使用FTPClient工具所遇到的
  18. URL地址编码和解码
  19. Divide the Sequence (贪心)
  20. MYSQL + MHA +keepalive + VIP安装配置(二)--MHA的配置

热门文章

  1. flask插件系列之Flask-WTF表单
  2. LCD之mipi DSI接口驱动调试流程【转】
  3. elk系列5之syslog的模块使用【转】
  4. juery下拉刷新,div加载更多元素并添加点击事件(二)
  5. learnyounode 题解
  6. POJ 3279 Fliptile(DFS+反转)
  7. python 爬图
  8. Linux 基础——权限管理命令chown、chgrp
  9. appium---【Mac】Appium-Doctor提示WARN:“applesimutils cannot be found”解决方案
  10. MYSQL-----控制流程函数(case when...then..else..end)