• Cats Transport


    Cats Transport

    现在有n座山,第i座山的坐标为(d_i),初始p个饲养员在山1,有m只猫,每只猫有一个属性(h_i,t_i)表示猫i
    (h_i)以及它在(t_i)时间后才能被带走((t_i)之前不算做在等待),现在请安排饲养员的出发时间,每个饲养员的速度都为每个单位长度每个单位时间,让所有的猫被带走之前的等待时间之和最短。

    (2<=n<=10^5,1<=m<=10^5,1<=p<=100)

    注意到饲养员的出发时间是不可能作为状态的,现在让d变为其前缀和,设一个饲养员的出发时间为t,于是考虑等待时间对于一只猫i的等待时间应为(t+d_{h_i}-t_i),注意到猫要能够被饲养员带走,必然有(t+d_{h_i}geq t_i),也即(tgeq t_i-d_{h_i}),于是为了简单判断猫是否能被带走,我们应该维护一个(g_i=t_i-d_{h_i}),为了便于判断一个饲养员能带走哪些猫,我们自然要排序,于是现在即发现问题即哪些连续的猫被哪个饲养员带走,于是问题被转化成了任务安排。

    因此设(f[i][j])表示前i个饲养员,带走前j只猫的最少等待时间,设s为g的前缀和,不难有

    [f[i][j]=f[i-1][k]_{0leq k< i}+sum_{l=k+1}^j(g_j-g_l) ]

    边界:(f[0][0]=0),其余无限大

    经整理,它的斜率优化式应为

    [s_k+f[i-1][k]=kg_j+f[i][j]-jg_j+s_j ]

    发现k是递增的,而g也是递增的,于是我们只要用单调队列维护斜率,在按斜率关系弹掉队首,答案取队首即可,时间复杂度易知(O(np))

    参考代码:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #define il inline
    #define ri register
    #define Size 200050
    #define ll long long
    using namespace std;
    int T[Size],L,R;
    ll s[Size],a[Size],sa[Size],dp[101][Size],y[Size];
    template<class free>il void read(free&);
    int main(){
    	int n,m,p;read(n),read(m),read(p);
    	for(int i(2);i<=n;++i)read(s[i]),s[i]+=s[i-1];
    	for(int i(1),j,k;i<=m;++i)read(j),read(k),a[i]=k-s[j];
    	sort(a+1,a+m+1);for(int i(1);i<=m;++i)sa[i]=sa[i-1]+a[i];
    	memset(dp,1,sizeof(dp)),dp[0][0]=0;
    	for(int i(1),j;i<=p;++i){L=R=1;
    		for(j=1;j<=m;++j){y[j]=dp[i-1][j]+sa[j];
    			while(L<R&&(y[T[L+1]]-y[T[L]])<=a[j]*(T[L+1]-T[L]))++L;
    			dp[i][j]=dp[i-1][T[L]]+(j-T[L])*a[j]-sa[j]+sa[T[L]];
    			while(L<R&&(y[T[R]]-y[T[R-1]])*(j-T[R])
    				  >=(y[j]-y[T[R]])*(T[R]-T[R-1]))--R;T[++R]=j;
    		}}printf("%lld",dp[p][m]);
    	return 0;
    }
    template<class free>
    il void read(free &x){
    	x&=0;ri char c;while(c=getchar(),c<'0'||c>'9');
    	while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+(c^48),c=getchar();
    }
    
    
  • 相关阅读:
    文件输出debug
    sweetalert
    js认清this的第一步
    Creating default object from empty value in PHP?
    matplotlib画图
    python解析库
    zabbix监控ssl证书过期时间
    aws 预留实例到期监控
    aws ec2挂载 s3
    aliyun挂载oss
  • 原文地址:https://www.cnblogs.com/a1b3c7d9/p/10976397.html
Copyright © 2020-2023  润新知