• [POI2014]Freight


    题目大意:
      有两个城镇$A$和$B$,有$n(nle10^6)$辆车从$A$地出发前往$B$再返回$A$地。两地之间的行驶时间为$s(sle10^9)$,每辆车从$A$地出发的最早时间是$t_i(0le t_1le t_2leldotsle t_nle10^9)$。行驶过程中需要保证每辆车出发时间至少相差$1$,且每个时刻运行的车都是同一个方向,问所有车都返回$A$地至少需要多少时间?

    思路:
      “行驶过程中需要保证每辆车出发时间至少相差$1$”相当于令$t_i=max(t_i,t_{i-1}+1)$。
      “每个时刻运行的车都是同一个方向”说明我们只需要对这些车分批,一批往返结束后下一批开始往返(一批车留在$B$地,另一批从$A$地过来一定存在一种等价的方案使得第一批往返完成后第二批出发)。
      有了以上两个信息,不难得到状态转移方程$f_i=min{max(t_i,f_j+i-j-1)+2s+i-j-1}$。
      由于$f_j+i-j-1$是单调递增的,所以$max(t_i,f_j+i-j-1)$中一定可以找到一个转折点$j$使得$j$的左边取到$t_i-i$,右边取到$f_j-j-1$。左边是定值因此$j$越大越好,右边相当于求区间$[j,i)$的最小值,用树状数组维护即可,时间复杂度$O(nlog n)$。已经能AC了。
      事实上,因为$f_i$的增长速度$ge2i$,所以取最左边即转折点的一定更优,这样就可以省掉树状数组。考虑到转折点位置是单调递增的,因此只需要每次把上一次的转折点位置记录下来,累加到当前转折点即可。时间复杂度$O(n)$。

     1 #include<cstdio>
     2 #include<cctype>
     3 #include<climits>
     4 #include<algorithm>
     5 typedef long long int64;
     6 inline int getint() {
     7     register char ch;
     8     while(!isdigit(ch=getchar()));
     9     register int x=ch^'0';
    10     while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
    11     return x;
    12 }
    13 const int N=1e6+1;
    14 int t[N]={-1};
    15 int64 f[N];
    16 int main() {
    17     const int n=getint(),s=getint();
    18     for(register int i=1,j=1;i<=n;i++) {
    19         f[i]=LLONG_MAX;
    20         t[i]=std::max(getint(),t[i-1]+1);
    21         for(j--;j<i&&std::max((int64)t[i],f[j]+i-j-1)+s*2+i-j-1<f[i];j++) {
    22             f[i]=std::max((int64)t[i],f[j]+i-j-1)+s*2+i-j-1;
    23         }
    24     }
    25     printf("%lld
    ",f[n]);
    26     return 0;
    27 }


  • 相关阅读:
    小程序跳转 H5 时 cookie 值处理问题
    小程序 <web-view></web-view> 中使用 form 表单提交
    React Router 4.x 开发,这些雷区我们都帮你踩过了
    【译】使用 Flutter 实现跨平台移动端开发
    js中的 Date对象 在 IOS 手机中的兼容性问题
    thinkPHP中M()和D()的区别
    thinkphp的select和find的区别
    ThinkPHP3.1快速入门教程
    打开MSSQL 2008 R2的时候,展开数据库都显示以下的错误提示: 值不能为空。参数名viewinfo(microsoft.sqlserver.management.sqlstudio.explorer)
    原型模式(Prototype Pattern)
  • 原文地址:https://www.cnblogs.com/skylee03/p/8670100.html
Copyright © 2020-2023  润新知