题目链接

\(Description\)

数轴上有一个人,从\(0\)出发到\(E\),速度为\(1\)。数轴上还有\(n\)只熊,每只熊会在经过后的\(T\)时刻后产生一个金币。给定\(E,T\)以及\(n\)个熊的坐标\(p_i\),求收集完所有金币并到达\(E\)的最短时间。

\(n\leq10^5,\quad E,T\leq10^9\)。

\(Solution\)

令\(f_i\)表示当前\(1\sim i\)只熊的金币已经收集完,且现在在\(p_i\)处的最短时间。

每次一定是路过一段的熊,然后回去吃完金币再回到\(i\)。

那么有:$$f_i=\min{f_j+p_i-p_j+\max{T,\ 2(p_i-p_{j+1})}}$$

其实\(p_i-p_j\)这一部分是必走的(就是从\(0\)到\(E\)),不需要考虑,可以最后直接加个总时间\(E\)。

所以$$f_i=\min{f_j+\max{T,\ 2(p_i-p_{j+1})}}$$

尝试对这个\(\max\)分类讨论一下。

假如我们维护最接近原点且满足\(T>2(p_i-p_{j+1})\)的位置\(j\),那么方程就是\(f_i=\min\{f_j+T\}\)。

而对于不要的那些满足\(T\leq2(p_i-p_{j+1})\)的\(j\),\(f_i=\min\{f_j+2p_i-2p_{j+1}\}\),只要记录这些\(j\)的\(f_j-2p_{j+1}\)的最小值就可以了(是段前缀)。

复杂度\(O(n)\)。

//4ms	2304KB
#include <cstdio>
#include <cctype>
#include <algorithm>
//#define gc() getchar()
#define MAXIN 1000000
#define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++)
typedef long long LL;
const int N=1e5+5; int p[N];
LL f[N];
char IN[MAXIN],*SS=IN,*TT=IN; inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now;
} int main()
{
int n=read(),E=read(),T=read();
for(int i=1; i<=n; ++i) p[i]=read();
LL mn=1e16;
for(int i=1,j=0; i<=n; ++i)
{
while(T<=2*(p[i]-p[j+1])) mn=std::min(mn,f[j]-2*p[j+1]), ++j;
if(j!=i) f[i]=std::min(f[j]+T,mn+2*p[i]);
else f[i]=mn+2*p[i];
}
printf("%lld\n",f[n]+E); return 0;
}

AGC 007D.Shik and Game(DP)的更多相关文章

  1. AGC 018E.Sightseeing Plan(组合 DP)

    题目链接 \(Description\) 给定三个不相交的矩形\(A(X1,Y1)-(X2,Y2),B(X3,Y3)-(X4,Y4),C(X5,Y5)-(X6,Y6)\),求 从第一个矩形中某点\(a ...

  2. AGC 001E.BBQ Hard(组合 DP)

    题目链接 \(Description\) 给定长为\(n\)的两个数组\(a,b\),求\[\sum_{i=1}^n\sum_{j=i+1}^n\binom{a_i+a_j+b_i+b_j}{a_i+ ...

  3. agc007D - Shik and Game(dp 单调性)

    题意 题目链接 Sol 主人公的最优决策一定是经过熊->返回到某个位置->收集经过的钻石 那么可以直接设\(f[i]\)表示收集完了前\(i\)个位置的钻石的最小时间,转移的时候枚举下最后 ...

  4. 洛谷 P3580 - [POI2014]ZAL-Freight(单调队列优化 dp)

    洛谷题面传送门 考虑一个平凡的 DP:我们设 \(dp_i\) 表示前 \(i\) 辆车一来一回所需的最小时间. 注意到我们每次肯定会让某一段连续的火车一趟过去又一趟回来,故转移可以枚举上一段结束位置 ...

  5. AGC 018E.Sightseeing Plan——网格路径问题观止

    原题链接 鸣谢:AGC 018E.Sightseeing Plan(组合 DP) 本蒟蒻认为,本题堪称网格路径问题观止. 因为涵盖了不少网格路径问题的处理方法和思路. 一句话题意: 给你三个矩形. 三 ...

  6. AtCoder Beginner Contest 122 D - We Like AGC(DP)

    题目链接 思路自西瓜and大佬博客:https://www.cnblogs.com/henry-1202/p/10590327.html#_label3 数据范围小 可直接dp f[i][j][a][ ...

  7. AtCoder Beginner Contest 122 D - We Like AGC (DP)

    D - We Like AGC Time Limit: 2 sec / Memory Limit: 1024 MB Score : 400400 points Problem Statement Yo ...

  8. AGC 005D.~K Perm Counting(容斥 DP 二分图)

    题目链接 \(Description\) 给定\(n,k\),求 满足对于所有\(i\),\(|a_i-i|\neq k\)的排列的个数. \(2\leq n\leq 2000,\quad 1\leq ...

  9. AGC 016 F - Games on DAG(状压dp)

    题意 给你一个有 \(n\) 个点 \(m\) 条边 DAG 图,点的标号和拓扑序一致. 现在有两个人进行博弈,有两个棋子分别在 \(1, 2\) 号点上,需要不断移动到它指向的点上. 如果当前两个点 ...

随机推荐

  1. cf1042d 树状数组逆序对+离散化

    /* 给定一个数组,要求和小于t的段落总数 求前缀和 dp[i]表示以第i个数为结尾的小于t的段落总数,sum[i]-sum[l]<t; sum[i]-t<sum[l],所以只要找到满足条 ...

  2. getComputedStyle()用法详解

    那如果元素即没有在style属性中设置宽高,也没有在样式表中设置宽高,还能用getComputedStyle或currentStyle获取吗?答案是getComputedStyle可以,current ...

  3. Java在线备份和还原MySQL数据库。

    2018年6月29日14:00:48 阅读数:1534 今天整了整整一整天,终于使用Java在线备份和还原MySQL数据库了,哎,备份倒是很快,就是在还原的时候遇到了一个问题,也不报错,结果将sql语 ...

  4. AI-序列化-做五个数据接口

    #url.py url(r'^customer/$', views.CustomerView.as_view()), #查询所有数据.添加数据接口url url(r'^customer/(\d+)', ...

  5. 配置webpack loader vue 报错:Module build failed: TypeError: this._init is not a function

    单文件组件 引入时报错 配置webpage.config.js中的vue 需要如下写法 { test: /\.vue/, loader: "vue-loader", } 之前写的l ...

  6. 计蒜客 X的平方根(二分法)

    设计函数int sqrt(int x),计算 xx 的平方根. 输入格式 输入一个 整数 xx,输出它的平方根.直到碰到文件结束符(EOF)为止. 输出格式 对于每组输入,输出一行一个整数,表示输入整 ...

  7. Nancy 返回值详解

    简介 Nancy 是一个轻量级的,简单粗暴的framework用来构建基于HTTP的各种服务,兼容.Net和Mono.它的返回值也是多种多样的,适应各种不同的情况.包括Response.AsFile( ...

  8. Description Resource Path Location Type Project configuration is not up-to-date with pom.xml. Select: Maven->Update Project... from the project context menu or use Quick Fix. spark-MT line 1 Maven Co

    1.相信大家新建的maven项目,然后添加好依赖(即修改了pom.xml文件以后就会出现如下所示的错误): Description Resource Path Location Type Projec ...

  9. SP3734 PERIODNI - Periodni

    题解: 第一道笛卡尔树dp 会发现以一个点为分界 如果左边大于它右边大于它 那么大于的那部分是相互不影响的 于是我们对序列建立笛卡尔树 满足父亲节点的v<儿子节点的v 然后这棵树的中序遍历为原序 ...

  10. 【CF809D】Hitchhiking in the Baltic States

    题意: 给你n个区间[li,ri],让你选出从中一个子序列,然后在子序列的每个区间里都选择一个tj,满足t1<t2<...<tlent1<t2<...<tlen.最 ...