首页 > 其他分享 >运输小猫

运输小猫

时间:2023-04-28 21:11:28浏览次数:40  
标签:运输 小猫 get int ll d% tt

题目传送门

考虑每只小猫是否能被接到、等待时间,其实在于 \(start+d_2+d_3+\dots+d_i\) 的值,如果 \(\ge t_i\),即出发时间加上这些距离晚于 \(t_i\)。可以将 \(d\) 移过来,那么每只小猫都可以用一个数 \(a_i\) 来衡量了。对于 \(a\) 排序,即可以划分成最多饲养员数量 \(p\) 的组数。每组内的答案都是最后一个时间减去每个 \(a\)。即 \(f[j][i]\) 表示前 \(j\) 个饲养员,运输 \(i\) 只小猫的最少用时。可以得到 \(f[j][i]=\min{f[j-1][k]+a[i](i-k)-(s[i]-s[k])}\)。去掉 \(\min\) 并对于式子进行整理, \(f[j-1][k]+s[k]=a[i]k-a[i]i+s[i]+f[j][i]\),可以视等式左边为 \(y\),\(a[i]\) 为 \(k\),\(k\) 为 \(x\),后面的一坨为 \(b\),这就是一个一次函数。\(b\) (截距)最小,因为后面是常量,所以就是求答案最小。根据斜率优化的做法即可优化。

#include<bits/stdc++.h>
using namespace std;
#define L(i,l,r) for(int i=l;i<=r;++i)
#define R(i,l,r) for(int i=r;i>=l;--i)
const int N=100010,M=100010,P=110;
typedef long long ll;
int n,m,p,q[M],d[N],a[M];
ll f[P][M],s[M];
#define get_y(j,k) (f[(j)-1][(k)]+s[(k)])
int main(){
    // freopen("1.in","r",stdin);
    // freopen("1.out","w",stdout);
    // ios::sync_with_stdio(0);
    // cin.tie(0);
    // cout.tie(0);
    scanf("%d%d%d",&n,&m,&p);
    L(i, 2, n){
        scanf("%lld",d+i);
        d[i]+=d[i-1];
    }
    L(i,1,m){
        int h,t;
        scanf("%d%d",&h,&t);
        if((ll)t-(ll)h>=INT_MAX||(ll)t-(ll)h<=INT_MIN){
            printf("%d %d\n",t,h);
        }
        a[i]=t-d[h];
    }
    sort(a+1,a+1+m);
    L(i, 1, m)s[i]=s[i-1]+1ll*a[i];
    memset(f,0x3f,sizeof f);
    L(i, 0, p)f[i][0]=0;
    L(j, 1, p){
        int hh=0,tt=0;
        L(i, 1, m){
            while(hh<tt&&(get_y(j,q[hh+1])-get_y(j,q[hh]))<=1ll*a[i]*(q[hh+1]-q[hh]))++hh;
            int k=q[hh];
            f[j][i]=f[j-1][k]+1ll*a[i]*(i-k)-(s[i]-s[k]);
            while(hh<tt&&(get_y(j,q[tt])-get_y(j,q[tt-1]))*(i-q[tt])>=(get_y(j,i)-get_y(j,q[tt]))*(q[tt]-q[tt-1]))--tt;
            q[++tt]=i;
        }
    }
    printf("%lld",f[p][m]);
    return 0;
}

标签:运输,小猫,get,int,ll,d%,tt
From: https://www.cnblogs.com/wscqwq/p/17363169.html

相关文章

  • 第五章运输层
    5.运输层5.1运输层概述5.1.1进程间基于网络的通信网络层提供主机间的逻辑通信,而对于运输层提供进程间的逻辑通信AP1与AP4进程进行通信,AP2与AP3进程进行通,两者通过五层网络层次结构,在运输层时通过不同端口(端口号),进行通信,注意此处的端口不是物理端口号,而是用来去区分进......
  • 第五章运输层
    5.运输层5.1运输层概述5.1.1进程间基于网络的通信网络层提供主机间的逻辑通信,而对于运输层提供进程间的逻辑通信AP1与AP4进程进行通信,AP2与AP3进程进行通,两者通过五层网络层次结构,在运输层时通过不同端口(端口号),进行通信,注意此处的端口不是物理端口号,而是用来去区分进......
  • P2680 NOIP2015 提高组 运输计划
    P2680NOIP2015提高组运输计划最小化最长的路径,考虑二分答案。问题转化成检验删去一条边的边权后,最长路径权值能否不超过\(x\)。考虑没删边权时,原先那些不超过\(x\)的路径,删去边权后肯定不会影响,直接忽略。考虑原先比\(x\)长的那些路径。我们期望删边权后这些路径全部......
  • 人工智能技术可有效提高交通运输效率和安全性
    随着城市化进程的加速,交通运输问题越来越成为人们关注的焦点。而人工智能技术的发展,为解决交通运输问题提供了新的思路和方法。本文将探讨人工智能技术在交通运输领域的应用,以及它对交通运输效率和安全性的提升。一、人工智能技术在交通运输领域的应用1.智能交通管理系统智能......
  • 【计算机网络】运输层知识点
    运输层运输层向它上面的应用层提供通信服务。真正通信的主体是主机中的一个进程和另一个主机的一个进程交换数据。网络层为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信。运输层向高层用户屏蔽了下面网络核心的细节,使应用进程看见的就好像在两个运输层实体......
  • 计算机网络----运输层
    《运输层概述》    解释:《端口》 具体书P214两台主机进行通信就是两台主机中的应用进程相互通信所谓的端到端的通信也就是应用进程之间的通信这个端就是所谓的端口   ......
  • 计算机网络实验 实验5 运输层和应用层协议解析
    实验5运输层和应用层协议解析一、实验目的  本实验通过运用Wireshark对网络活动进行分析,观察TCP协议报文,分析通信时序,理解TCP的工作过程,掌握TCP工作原理与实现;学会运用Wireshark分析TCP连接管理、流量控制和拥塞控制的过程,发现TCP的性能问题。二、实验内容任务1:TCP正常......
  • 苹果反间谍趣闻:曾把产品放在番茄箱子里运输
    虽然每次苹果推出新产品之前总是流言满天飞,但并不代表苹果在保密措施上不上心,相反地,苹果对于供应商方面泄露信息地担心已经到神经质的地步。甚至曾经用为未作特殊标记番茄箱子运送产品。当然,这不是另一个瞎扯的流言,这是由BusinessWeek的 PeterBurrows和AdamSatariano报道......
  • P4015 运输问题
    W公司有mm个仓库和nn个零售商店。第ii个仓库有aiai​个单位的货物;第jj个零售商店需要bjbj​个单位的货物。货物供需平衡,sum{ai}=sum{bi}从第i个仓库运送......
  • 洛谷 P1967 货车运输
    P1967NOIP2013提高组]货车运输-洛谷|计算机科学教育新生态(luogu.com.cn)这个题目算是lca的稍微拓展吧。主要思考方向应该是很明显的。就是考虑一条路径上权值最......