SB贪心......暴露了我代码能力巨弱的本质。

题面

解:首先我们应该想到DP(但是我想到了贪心......)

然后分析题目本质,每个点有个限制,最早开走时间不得早于最晚上车时间。

然后我们就可以把每个人看做都在那个时间上车。

然后我们发现,对一个地方使用加速,会影响它后面一段区间。

然后就有个暴力·雏形是枚举在某个点用加速,看它能够减少的时间,取最大的那个用。

然后看一眼数据范围,大概是n²,可以过,只要你每次找到收益最大的点是O(n)即可。

然后发现好难写,细节巨多无比......一直觉得这个算法是错的,因为只有一个想法,根本无法转成代码实现。

然后肝了好久,受不了了,去看题解,发现我TM想的是正解,只是不会实现......

代码实现:

固定数组:limit,up,down,sum,分别表示最晚上车时间,上车人数,下车人数,down的前缀和。

变化数组:dis,to,to_lar,now,influ,分别表示所用时间(D),最远能影响到的位置,这条影响链上最多能承受减去的时间,抵达这里的时间,这里修改会影响的人数。

大部分可变数组都倒序求出,now是正序求出。

然后试一下某hack数据:

4 5 1
3 0 2

0 1 2
0 1 4
0 1 4
0 1 4
0 1 4       ans = 18

 #define wwx AK_IOI 

 #include <cstdio>
#include <algorithm> const int N = , INF = 0x7f7f7f7f, M = ; struct Custom {
int t, A, B;
}a[M]; int n, m, k, dis[N], limit[N], to[N], now[N], up[N], down[N], sum[N], influ[N], to_lar[N]; int main() {
scanf("%d%d%d", &n, &m, &k);
for(int i = ; i < n; i++) {
scanf("%d", &dis[i]);
}
for(int i = ; i <= m; i++) {
scanf("%d%d%d", &a[i].t, &a[i].A, &a[i].B);
limit[a[i].A] = std::max(limit[a[i].A], a[i].t);
up[a[i].A]++;
down[a[i].B]++;
}
sum[] = down[];
for(int i = ; i <= n; i++) {
limit[i] = std::max(limit[i], limit[i - ]);
sum[i] = sum[i - ] + down[i];
}
// get limit sum up down while(k) {
now[] = ;
for(int i = ; i <= n; i++) {
now[i] = std::max(now[i - ], limit[i - ]) + dis[i - ];
}
int large = -, pos = -;
to[n] = n - ;
to_lar[n] = INF;
for(int i = n - ; i >= ; i--) {
if(now[i + ] > limit[i + ]) {
to[i] = to[i + ];
to_lar[i] = std::min(to_lar[i + ], now[i + ] - limit[i + ]);
//to_lar[i] = std::min(to_lar[i], dis[i]); <- ERROR
}
else {
to[i] = i;
to_lar[i] = INF;
}
influ[i] = sum[to[i] + ] - sum[i];
//printf("influ : %d %d \n", i, influ[i]);
if(influ[i] > large && to_lar[i] && dis[i]) {
large = influ[i];
pos = i;
}
}
if(to_lar[pos] == ) {
break;
}
to_lar[pos] = std::min(to_lar[pos], dis[pos]);
dis[pos] -= std::min(to_lar[pos], k);
k -= std::min(to_lar[pos], k);
//printf("pos = %d to[] = %d lar = %d \n", pos, to[pos], to_lar[pos]);
} now[] = ;
for(int i = ; i <= n; i++) {
now[i] = std::max(now[i - ], limit[i - ]) + dis[i - ];
} int ans = ;
for(int i = ; i <= m; i++) {
ans += now[a[i].B] - a[i].t;
} printf("%d", ans);
return ;
}

AC代码

洛谷P1315 观光公交的更多相关文章

  1. [NOIP2011] 提高组 洛谷P1315 观光公交

    题目描述 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第 0 分钟出现在 1号景点,随后依次前往 2 ...

  2. 洛谷 P1315 观光公交 —— 贪心

    题目:https://www.luogu.org/problemnew/show/P1315 问题是想不明白改动一条边会对后面造成怎样的影响: 实际上影响的会是一段,当某个车站出发时间受其来人牵制时, ...

  3. NOIP2011 洛谷P1315 观光公交

    题目传送门 先解释一下数组的意义: d[i]表示公交车从第i个点到第i+1个点需要的时间 pas结构体中:t表示这个乘客到公交站牌的时间,u表示起点,v表示终点 wait[i]表示公交车在第i个站点等 ...

  4. 洛谷P1315 观光公交 [noip2011D2T3] 贪心

    正解:贪心 解题报告: 这里是链接! 唔我觉得还是很容易想到是贪心的,这个难就难在怎么贪心 下面列一下常见的几个贪心思想: 1)根据车上的人数排序,人最多的那条路用加速器 错误,人数多并不意味着加速的 ...

  5. 【题解】洛谷P1315 [NOIP2011TG] 观光公交(前缀和+贪心)

    次元传送门:洛谷P1315 思路 思路大概想到了 可是代码实现却没想到 所以参考题解了 D2T3的贪心果然有难度 我们考虑在每次用加速器有两种情况 到下一个点还需要等待:以后的时间就不再影响了 到下一 ...

  6. 洛谷P1315 [NOIP2011提高组Day2T3] 观光公交

    P1315 观光公交 题目描述 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第 0 分钟出现在 1号 ...

  7. [luogu]P1315 观光公交[贪心]

    [luogu]P1315 [NOIP2011]观光公交 ——!x^n+y^n=z^n 题目描述 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车, ...

  8. 题解【洛谷P1315】[NOIP2011]观光公交

    题目描述 风景迷人的小城 Y 市,拥有 \(n\) 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务. 观光公交车在第 \(0\) 分钟出现在 \( ...

  9. P1315 观光公交

    题目描述 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第 0 分钟出现在 1号景点,随后依次前往 2 ...

随机推荐

  1. LVS负载均衡下session共享的实现方式-持久化连接

    之前简单介绍LVS负载均衡的高可用方案实施,下面详细说明LVS的session解决方案: LVS算法中,SH算法可以实现将同一客户端的请求总是发送给第一次指定的RS,除非该RS出现故障不能再提供服务. ...

  2. 个人博客作业_week7

    心得 在为期将近一个月的团队编程中,给我感受最深的是敏捷开发和团队中队员之间的互补. 在最初的软件开发中,由于以前没有这方面的经验,所以并没有很大的进展.在慢慢过度中,我们找到了自己的节奏感,大家各自 ...

  3. Scrum Meeting day 4

                第四次会议 No_00:工作情况 No_01:任务说明 待完成 已完成 No_10:燃尽图 No_11:照片记录 待更新 No_100:代码/文档签入记录 No_101:出席表 ...

  4. html5制作导航条

    (1)background-repeat:no-repeat;图片不平铺 (2)使用<ul>和<li>便签,代码简介有序.易于编排. (3)在引入外部css文件时,<li ...

  5. Android Studio下创建menu布局文件

    一.问题: android studio项目中没有看到menu文件夹: 在android studio项目中想要添加menu布局文件,一开始我的做法是:直接在res文件夹右键选择xml文件来添加,如下 ...

  6. [转帖]什么是安全散列算法SHA256?

    什么是安全散列算法SHA256? http://8btc.com/article-136-1.html 发布者: 无主之地 发表于: 2013-10-1 01:31 78152 2 分享   安全散列 ...

  7. linux_压缩解压命令(zip/tar)

    一.zip 1.压缩 格式 $ zip (选项) (文件/目录) 选项 -r 参数表示递归打包包含子目录的全部内容. -q 参数表示为安静模式,即不向屏幕输出信息. -o 表示输出文件,需在其后紧跟打 ...

  8. memcache 分布式缓存

    转载地址:http://www.cnblogs.com/phpstudy2015-6/p/6713164.html 作者:那一叶随风 1.memcached分布式简介 memcached虽然称为“分布 ...

  9. pandas绘图

    #encoding:utf8 import pandas as pd import numpy as np import matplotlib.pyplot as plt df = pd.DataFr ...

  10. <a>與<link>的區別

    <a>連接網頁: <link>定義文檔與外部資源的關係或引用外部樣式表,屬性ref表示連接對象的類型,stylesheet表示連接的是css類型的. 參考資料: https:/ ...