博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[NOIP2011] 观光公交
阅读量:6100 次
发布时间:2019-06-20

本文共 1343 字,大约阅读时间需要 4 分钟。

1196604-20171108192238997-2142472155.png

1196604-20171108192243122-1360954989.png
1196604-20171108192248325-722415459.png
设这几个东西:

  1. \(t[i]\),最晚到达 \(i\) 站的人到达的时间;
  2. \(arrive[i]\),车到达 \(i\) 站的时间,显然 \(arrive[i]=max(arrive[i-1],t[i-1])+D[i-1]\)

所以要求的答案就是:\(\sum arrive[target[i]]-reach[i]\)\(reach[i]\)\(i\)到站的时间

当我们考虑到加速器的时候,对于一个站,当 \(arrive[i]<=t[i]\) 时,前面不管用了多少个加速器都不会影响到后面的时间,所以我们再设这样一个东西:\(f[i]\)为,在 \(i\) 这个站用了加速器后能够影响到的 \(i\) 后面最远的站,当 \(arrive[i]<=t[i]\) 时,\(f[i]=i+1\),否则,\(f[i]=f[i+1]\)。所以我们在 \(i\) 站用一个加速器,就会使得答案减少 \(S[f[i]]-S[i]\) ,其中,\(S[i]\)为在 \(i\) 站下车的人数的前缀和,所以我们只需要每次在一个使得 \(S[f[i]]-S[i]\) 最大的 \(i\) 上放一个加速器并实时更新一下 \(arrive[i]\)\(f[i]\) 就好了

//made by Hero_of_Someone#include
#include
#include
#define N (1010)#define RG registerusing namespace std;inline int gi(){ RG int x=0,q=1; RG char ch=getchar(); while( ( ch<'0' || ch>'9' ) && ch!='-' ) ch=getchar(); if( ch=='-' ) q=-1,ch=getchar(); while(ch>='0' && ch<='9') x=x*10+ch-48,ch=getchar(); return q*x; }int n,m,k,D[N],ret;int t[N],arrive[N],S[N],f[N];void init(){ n=gi(),m=gi(),k=gi(); for(RG int i=1;i
Max&&D[i]) Max=S[f[i]]-S[i],s=i; if(!Max) break; D[s]--; k--; for(RG int i=1;i<=n;i++) arrive[i]=max(arrive[i-1],t[i-1])+D[i-1]; } for(RG int i=1;i<=n;i++) ret+=arrive[i]*(S[i]-S[i-1]); printf("%d\n",ret);}int main(){ init(); work(); return 0; }

转载于:https://www.cnblogs.com/Hero-of-someone/p/7805786.html

你可能感兴趣的文章
High-speed Charting Control--MFC绘制图表(折线图、饼图、柱形图)控件
查看>>
go test命令參数问题
查看>>
linux 搜索文本
查看>>
超实用Mac软件分享(二)
查看>>
Android JSON数据解析
查看>>
DEV实现日期时间效果
查看>>
java注解【转】
查看>>
Oracle表分区
查看>>
centos 下安装g++
查看>>
嵌入式,代码调试----GDB扫盲
查看>>
类斐波那契数列的奇妙性质
查看>>
配置设置[Django]引入模版之后报错Requested setting TEMPLATE_DEBUG, but settings are not configured....
查看>>
下一步工作分配
查看>>
Response. AppendHeader使用大全及文件下载.net函数使用注意点(转载)
查看>>
Wait Functions
查看>>
代码描述10313 - Pay the Price
查看>>
jQuery最佳实践
查看>>
centos64i386下apache 403没有权限访问。
查看>>
vb sendmessage 详解1
查看>>
jquery用法大全
查看>>