zoukankan      html  css  js  c++  java
  • 【HihoCoder #1529】— 不上升序列(dp+斜率)

    传送门

    可以列出dpdp

    f[i][j]f[i][j]表示前ii个点,最小的为jj的最小花费

    那么显然有f[i][j]=(mink>=jf[i1][k])+a[i]jf[i][j]=(min_{k>=j}f[i-1][k])+|a[i]-j|

    可以归纳法证明f[i]f[i]是一个分段一次函数
    考虑这个式子,每次转移就是取了一个后缀minmin然后加上一个斜率为+1underline +1的分段一次函数

    设斜率为00的地方为pp
    就分a[i]a[i]pp的大小关系讨论一下

    具体不想写了。。。。
    可以看这篇

    #include<bits/stdc++.h>
    using namespace std;
    const int RLEN=1<<20|1;
    inline char gc(){
        static char ibuf[RLEN],*ib,*ob;
        (ob==ib)&&(ob=(ib=ibuf)+fread(ibuf,1,RLEN,stdin));
        return (ob==ib)?EOF:*ib++;
    }
    #define gc getchar
    inline int read(){
        char ch=gc();
        int res=0,f=1;
        while(!isdigit(ch))f^=ch=='-',ch=gc();
        while(isdigit(ch))res=(res+(res<<2)<<1)+(ch^48),ch=gc();
        return f?res:-res;
    }
    #define ll long long
    #define re register
    #define pii pair<int,int>
    #define fi first
    #define se second
    #define pb push_back
    #define cs const
    const int mod=1e9+7;
    inline int add(int a,int b){return a+b>=mod?a+b-mod:a+b;}
    inline void Add(int &a,int b){a=add(a,b);}
    inline int dec(int a,int b){return a>=b?a-b:a-b+mod;}
    inline void Dec(int &a,int b){a=dec(a,b);}
    inline int mul(int a,int b){return 1ll*a*b>=mod?1ll*a*b%mod:a*b;}
    inline void Mul(int &a,int b){a=mul(a,b);}
    inline int ksm(int a,int b,int res=1){for(;b;b>>=1,a=mul(a,a))(b&1)?(res=mul(res,a)):0;return res;}
    inline void chemx(int &a,int b){a<b?a=b:0;}
    inline void chemn(int &a,int b){a>b?a=b:0;}
    priority_queue<int,vector<int>,greater<int> >q;
    cs int N=100005;
    int n;
    ll ans;
    int main(){
    	n=read();
    	q.push(read());
    	for(int i=2;i<=n;i++){
    		int x=read();
    		q.push(x);
    		if(q.top()<x){
    			ans+=x-q.top();
    			q.pop(),q.push(x);
    		}
    	}
    	cout<<ans;
    }
    
  • 相关阅读:
    【纯水题】POJ 1852 Ants
    【树形DP】BZOJ 1131 Sta
    【不知道怎么分类】HDU
    【树形DP】CF 1293E Xenon's Attack on the Gangs
    【贪心算法】CF Emergency Evacuation
    【思维】UVA 11300 Spreading the Wealth
    【树形DP】NOI2003 逃学的小孩
    【树形DP】BZOJ 3829 Farmcraft
    【树形DP】JSOI BZOJ4472 salesman
    【迷宫问题】CodeForces 1292A A NEKO's Maze Game
  • 原文地址:https://www.cnblogs.com/stargazer-cyk/p/12328602.html
Copyright © 2011-2022 走看看