SCU - 4509

使用若干条线段,覆盖坐标轴上的 N个点
覆盖 [i,j][i, j]的代价为cost(i,j)=W+(xi−xj)2cost(i,j) = W + (x_i-x_j)^2
求覆盖所有点的最小代价


斜率优化入门题,与 HDU - Print Article一致
对坐标排序后,设dp[i]表示已经覆盖前 i个点的最小代价
容易得出DP方程为
dp[i]=min(dp[j−1]+(xi−xj)2)dp[i] = min( dp[j-1] + (x_i-x_j)^2)
这是 O(N2)O(N^2) 的转移,所以需要优化

设有 k<jk ,且满足
dp[k−1]+(xi−xk)2≥dp[j−1]+(xi−xj)2dp[k-1]+(x_i-x_k)^2 \geq dp[j-1]+(x_i-x_j)^2
那么我们选择从 j 转移,把 k优化掉

通过整理上式,可以得到
(dp[j−1]+x2j)−(dp[k−1]+x2k)2(xj−xk)≤xi\frac {(dp[j-1]+x_j^2)-(dp[k-1]+x_k^2)} {2(x_j-x_k)} \leq x_i
设 Yi=dp[i−1]+x2iY_i=dp[i-1]+x_i^2 ,Xi=2∗xiX_i=2*x_i
这样左边其实就是一个斜率的式子Yj−YkXj−Xk≤xi\frac {Y_j-Y_k} {X_j-X_k} \leq x_i
然后右边 xix_i是单调递增的,所以斜率也是单调递增的
意味着不满足单调递增的点 k都可以被优化掉
所以dp过程中需要用到的点连起来实际上构成了一个下凸包(斜率单调递增)

#pragma comment(linker, "/STACK:102400000,102400000")
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <map>
#include <set>
#include <queue>
using namespace std;
typedef pair<int,int> Pii;
typedef long long LL;
typedef unsigned long long ULL;
typedef double DBL;
typedef long double LDBL;
#define MST(a,b) memset(a,b,sizeof(a))
#define CLR(a) MST(a,0)
#define Sqr(a) (a*a)const int maxn=2e5+10;
int N,W;
LL inpt[maxn];
LL dp[maxn];
int que[maxn];LL Up(int,int);
LL Down(int,int);int main()
{#ifdef LOCALfreopen("in.txt", "r", stdin);
//  freopen("out.txt", "w", stdout);#endifint T;scanf("%d", &T);for(int ck=1; ck<=T; ck++){scanf("%d%d", &N, &W);for(int i=1; i<=N; i++) scanf("%lld", &inpt[i]);sort(inpt+1,inpt+1+N);N=unique(inpt+1,inpt+1+N)-(inpt+1);dp[0]=0; dp[1]=W;int head=0,tail=1;que[0]=1;for(int i=2; i<=N; i++){while(head+1<tail && Up(que[head], que[head+1]) <= inpt[i]*Down(que[head], que[head+1]))head++;dp[i]=dp[i-1]+W;dp[i]=min(dp[i], dp[que[head]-1]+Sqr((inpt[i]-inpt[que[head]]))+W);while(head+1<tail && Up(que[tail-1], i)*Down(que[tail-2], que[tail-1]) <= Up(que[tail-2], que[tail-1])*Down(que[tail-1], i))tail--;que[tail++]=i;}printf("%lld\n", dp[N]);}return 0;
}LL Up(int k, int j)
{return dp[j-1]+Sqr(inpt[j])-(dp[k-1]+Sqr(inpt[k]));
}LL Down(int k, int j)
{return 2*(inpt[j]-inpt[k]);
}

[SCU 4509] Snowdrop修长廊 (斜率DP)相关推荐

  1. B: Snowdrop修长廊

    Snowdrop修长廊 描述 Snowdrop现在是世界著名的工程师.因为重庆的天气太热了, Snowdrop决定修一条长廊,并且长廊要覆盖必须覆盖的n个点.为 了简化整个问题,我们把一条路抽象成一维 ...

  2. 斜率优化 Snowdrop修长廊 scu dp练习B题

    传送门:点击打开链接 题意:要覆盖完n个点,要覆盖掉[i,j]的代价是(X[i]-X[j])*(X[i]-X[j])+W,求覆盖完所有点的最小代价 思路:这是一道非常裸的斜率优化. 网上讲解斜率优化的 ...

  3. hdu 3480 斜率dp

    思路:很普通的斜率dp #include<cstdio> #include<cstring> #include<iostream> #include<algo ...

  4. HDU 3669 Cross the Wall(斜率DP+预处理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3669 题目大意:有n(n<=50000)个矩形,每个矩形都有高和宽,你可以在墙上最多挖k个洞使得 ...

  5. bzoj 3437: 小P的牧场(斜率DP)

    3437: 小P的牧场 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 1493  Solved: 830 [Submit][Status][Disc ...

  6. bzoj 1010: [HNOI2008]玩具装箱toy(斜率dp)

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 10837  Solved: 4513 [Submit] ...

  7. CSUST 2005 修仙 ( dp )

    链接: 修仙 题意: 你第 0 秒在 1 1位置,每个位置 经过 mp [ i ] [ j ] 秒后产生一个蘑菇,每个蘑菇存在一分钟,每次可以向四个方向移动一个,但不能回到上上次的方格,问 第 k 秒 ...

  8. bzoj1492 [NOI2007]货币兑换Cash (斜率DP+cdq分治)

    题意:到处都找得到. 我没看错的话当年考试的时候的题面里头,是提示了买卖一定是全部买入和卖出的.这样一来就好办了.cdq的论文里面那个F并不是她所说的那样,而是就是那个最优值.方程转移的时候实际上是枚 ...

  9. bzoj 3156: 防御准备(斜率DP)

    3156: 防御准备 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 2148  Solved: 912 [Submit][Status][Discu ...

最新文章

  1. Exchange2000需要创建的3个SMTP服务实例
  2. 第三方类AFNetworking
  3. python读取整个txt文件-Python读写txt文本文件
  4. mysql only_full_group_by报错的问题(转)
  5. 用Virtual PC 2007安裝Fedora Core 9
  6. 【编程6】贪吃蛇游戏(python+pygame)
  7. 0-1 背包问题的 4 种解决方法算法策略
  8. 【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记24 popovers弹窗
  9. Spring Cloud Config Server简介
  10. Docker中搭建FastDFS文件系统(多图)
  11. Sqlce与SQL Server2000/2005数据转换程序
  12. java - 通用 CRUD(增、删、改、查)工具类,代码高效复用
  13. 动态规划 —— 背包问题 —— 背包问题模版
  14. Python高级——多继承问题(super与mro)
  15. Spark Streaming的玫瑰与刺
  16. live2d手机制作软件_Live2D制作软件
  17. 后盾网html5视频教程全集观看下载
  18. iWebOffice
  19. C陷阱与缺陷(二)语义“陷阱”、连接
  20. 安装mysql不是Mariadb_解决centos7 中 使用mariadb 安装mysql不成功的问题

热门文章

  1. aardio - vlist虚表控件的使用
  2. 侧边悬浮音乐html,分享两款WordPress侧边栏悬浮音乐播放器插件简洁版与歌词版...
  3. 如何修改Kali和Centos7的ip
  4. 世界四大会计行控制中国审计业:中国大企业和银行已无商业秘密
  5. switc中 break和return的区别
  6. 微信小程序 fixed 解决 textarea 的 placeholder 不固定问题
  7. 耳机不分主从是什么意思_百元级真无线耳机性价比之选,TrueAir2无愧于黑胶小唱机...
  8. 1.5 使用电脑测试MC20的发送英文短信功能
  9. 语法制导翻译方案SDT
  10. python程序开机自启动_python 设置开机启动脚本