传送门

一道很棒的DP题目。

裸的DP方程很好搞:

$f[i][j]=min \{ f[i-1][k]+ C \times |k-j| +(k-a[i])^2 \}$

这个复杂度显然无法承受,考虑优化。

这个东西肯定不满足单调性和斜率上的优化条件,所以考虑分解这个式子。

$f[i][j]=min \{ f[i-1][k]+ C \times |j-k| +(k-a[i])^2 \}$

$f[i][j]=\begin{equation} \begin{cases} (j-a[i])^2+j \times C+min \{ f[i-1][k]-k\times C \} (k \leq j) \\ (j-a[i])^2-j \times C+min \{ f[i-1][k]+k\times C\} (j < k) \end{cases}  \end{equation} $

然后把右边那两部分预处理一下就行了

//POJ 3612
//by Cydiater
//2016.10.8
#include <iostream>
#include <cstdlib>
#include <queue>
#include <map>
#include <cstdio>
#include <iomanip>
#include <algorithm>
#include <ctime>
#include <cmath>
#include <cstring>
#include <string>
using namespace std;
#define ll long long
#define up(i,j,n)        for(int i=j;i<=n;i++)
#define down(i,j,n)        for(int i=j;i>=n;i--)
const int MAXN=1e6+5;
const int oo=0x3f3f3f3f;
inline int read(){
    char ch=getchar();int x=0,f=1;
    while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return x*f;
}
int N,C,height[MAXN],high[MAXN],f[MAXN],low[MAXN],ans=oo;
namespace solution{
    void init(){
        N=read();C=read();
        up(i,1,N)height[i]=read();
    }
    void slove(){
        memset(high,10,sizeof(high));
        memset(low,10,sizeof(low));
        up(i,1,100)f[i]=height[1]<=i?(i-height[1])*(i-height[1]):oo;
        up(i,2,N){
            int tmp=oo;
            down(j,100,1)low[j]=tmp=min(tmp,f[j]+j*C);tmp=oo;
            up(j,1,100)high[j]=tmp=min(tmp,f[j]-j*C);
            up(j,1,100)f[j]=j<height[i]?oo:((j-height[i])*(j-height[i])+min(low[j]-j*C,high[j]+j*C));
        }
        up(i,1,100)ans=min(ans,f[i]);
    }
    void output(){
        cout<<ans<<endl;
    }
}
int main(){
    //freopen("input.in","r",stdin);
    using namespace solution;
    init();
    slove();
    output();
    return 0;
}

POJ3612:Telephone Wire的更多相关文章

  1. [POJ3612] Telephone Wire(暴力dp+剪枝)

    [POJ3612] Telephone Wire(暴力dp+剪枝) 题面 有N根电线杆,初始高度为h[i],要给相邻的两根连线.可以选择拔高其中一部分电线杆,把一根电线杆拔高\(\Delta H\)的 ...

  2. [USACO07NOV]电话线Telephone Wire

    [USACO07NOV]电话线Telephone Wire 时间限制: 1 Sec  内存限制: 128 MB 题目描述 电信公司要更换某个城市的网线.新网线架设在原有的 N(2 <= N &l ...

  3. 【USACO07NOV】电话线Telephone Wire

    题目描述 电信公司要更换某个城市的网线.新网线架设在原有的 N(2 <= N <= 100,000)根电线杆上, 第 i 根电线杆的高度为 height_i 米(1 <= heigh ...

  4. BZOJ_1705_[Usaco2007 Nov]Telephone Wire 架设电话线_DP

    BZOJ_1705_[Usaco2007 Nov]Telephone Wire 架设电话线_DP Description 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务 于是 ...

  5. P2885 [USACO07NOV]电话线Telephone Wire

    P2885 [USACO07NOV]电话线Telephone Wire 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务于是,她们要求FJ把那些老旧的电话线换成性能更好的新电话 ...

  6. 【动态规划】bzoj1705: [Usaco2007 Nov]Telephone Wire 架设电话线

    可能是一类dp的通用优化 Description 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务 于是,她们要求FJ把那些老旧的电话线换成性能更好的新电话线. 新的电话线架设 ...

  7. bzoj1705[Usaco2007 Nov]Telephone Wire 架设电话线(dp优化)

    1705: [Usaco2007 Nov]Telephone Wire 架设电话线 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 441  Solved: ...

  8. DP+滚动数组 || [Usaco2007 Nov]Telephone Wire 架设电话线 || BZOJ 1705 || Luogu P2885

    本来是懒得写题解的…想想还是要勤发题解和学习笔记…然后就滚过来写题解了. 题面:[USACO07NOV]电话线Telephone Wire 题解: F[ i ][ j ] 表示前 i 根电线杆,第 i ...

  9. [USACO 07NOV]电话线Telephone Wire

    题目描述 Farmer John's cows are getting restless about their poor telephone service; they want FJ to rep ...

随机推荐

  1. nodejs实现Websocket的数据接收发送

    在去年的时候,写过一篇关于websocket的博文:http://www.cnblogs.com/axes/p/3586132.html ,里面主要是借助了nodejs-websocket这个插件,后 ...

  2. Common Issues Which Cause Roles to Recycle

    This section lists some of the common causes of deployment problems, and offers troubleshooting tips ...

  3. jQuery jsonp无法捕获404、500状态错误

    转载:http://www.cnblogs.com/pao8041/p/4750403.html 不过上面的这个我用的不好,下次有机会用

  4. Recommending branded products from social media -RecSys 2013-20160422

    1.Information publication:RecSys 2013 author:zhengyong zhang 2.What 是对上一篇论文的拓展:利用社交媒体中用户信息 对用户购买的类别排 ...

  5. php file_get_contents失败[function.file-get-contents]: failed to open stream: HTTP request failed!解决

    在使用file_get_contents方法来获取远程文件时会出现 [function.file-get-contents]: failed to open stream: HTTP request ...

  6. 【jQuery】Jquery.cookie()

    注意:如果不设置path,默认为当前路径,新建cookie $.cookie('name', 'value'); 新建带限制时间cookie $.cookie('name', 'value', { e ...

  7. jq实现登陆页面的拖拽功能

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <script src ...

  8. nginx安装(1) – ttlsa教程系列之nginx

    1.必要软件准备 安装pcre 为了支持rewrite功能,我们需要安装pcre   1 # yum install pcre* //如过你已经装了,请跳过这一步 安装openssl 需要ssl的支持 ...

  9. mxnet目录结构

    普通目录 R-package, R语言API, 因为用的python, 所以对R暂时不感兴趣 amalgamation, 将整个mxnet库打包成一个文件, 以方便直接在客户端调用, 如Android ...

  10. pip怎样用上豆瓣镜像

    安装环境: windows 7 64位 python 3.4.2 64位(自带pip) 安装好后在环境变量上加上:C:\Python34;C:\Python34\Scripts; 说明: 网上说改写什 ...