题目

传送门 to luogu

问题描述
阿明是一名推销员,他奉命到螺丝街推销他们公司的产品。

螺丝街是一条死胡同,出口与入口是同一个,街道的一侧是围墙,另一侧是住房。螺丝街一共有 NNN 家住房,第 iii 家住户到入口的距离为 SiS_iSi​ 米。由于同一栋房子里可以有多家住户,所以可能有多家住房与入口的距离相等。

阿明会从入口进入,依次向螺丝街的 XXX 家住房推销产品,然后再原路走出去。阿明每走 111 米就会积累 111 点疲劳值,向第 iii 家住房推销产品会积累 AiA_iAi​ 点疲劳值。阿明是工作狂,他想知道,对于不同的 XXX ,在不走多余路的前提下,他最多可以积累多少点疲劳值。

输入格式
第一行有一个正整数 NNN ,表示螺丝街住房的数量。

接下来的一行有 NNN 个正整数,其中第 iii 个整数 SiS_iSi​ 表示第 iii 家住户到入口的距离。数据
保证 S1≤S2≤…≤Sn≤108S_1\le S_2≤…≤S_n≤10^8S1​≤S2​≤…≤Sn​≤108 。

接下来的一行有 NNN 个整数,其中第 iii 个整数 AiA_iAi​ 表示向第 iii 户住户推销产品会积累的疲
劳值。数据保证 Ai<103Ai<10^3Ai<103 。

输出格式
输出 NNN 行,每行一个正整数,第 iii 行整数表示当 X=iX=iX=i 时,阿明最多积累的疲劳值。

数据范围与提示
对于20%20\%20%的数据,1≤N≤201≤N≤201≤N≤20 ;
对于40%40\%40%的数据,1≤N≤1001≤N≤1001≤N≤100 ;
对于60%60\%60%的数据,1≤N≤10001≤N≤10001≤N≤1000 ;
对于100%100\%100%的数据,1≤N≤1000001≤N≤1000001≤N≤100000 。

思路

说明:为了行文方便,以下称 “一户人家” 为 “点” ,将要推销的点的集合为 XXX 。

因为不走回头路,所以行走的疲劳值只有 2max⁡x∈XSx2\max_{x\in X} S_x2maxx∈X​Sx​ ,而推销疲劳值为 ∑x∈XAx\sum_{x\in X}A_x∑x∈X​Ax​ ,所以有:
ans=2max⁡x∈XSx+∑x∈XAxans=2\max_{x\in X}S_x+\sum_{x\in X}A_x ans=2x∈Xmax​Sx​+x∈X∑​Ax​

注意到 max⁡x∈XSx\max_{x\in X}S_xmaxx∈X​Sx​ 的变化是非常难的,所以,我们不妨假设一组解。其深层原因是,我们要最大化 ansansans,恰好它是由 max⁡Sx\max S_xmaxSx​ 决定的,二者统一

在这组解中,我们将 SSS 最大的点固定,剩下的点就可以任选,目的是让 ∑A\sum A∑A 最大。

很显然,剩下的点应当尽量去选择 AAA 比较大的,因为 SSS 已经不归它们管了。

所以,我们最多只需要一个点去得到较大的 SSS ,于是就至少会选前 i−1i-1i−1 大的 AAA 。

固定了 i−1i-1i−1 个极大的 AAA 之后,剩下的一个就应该综合考虑 S+AS+AS+A 了。这可以用 O(n)\mathcal O(n)O(n) 的预处理得到。

当然,也有可能不考虑 S+AS+AS+A ,直接全部选最大的 AAA ,SSS 就听天由命了。还是可以预处理。

上面这种情况的本质是,S+AS+AS+A 中的 SSS 却没有已经固定的大 AAA 厉害。毕竟 S+AS+AS+A 的考虑是比较狭隘的——它只考虑不属于前 iii 大的 AAA 的点。

代码

#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std;struct Home{int s,a;bool operator<(const Home &x)const{return a>x.a;}
};const int MAXN=100000;
int suma[MAXN+5],s_and_a[MAXN+5],maxs[MAXN+5];
Home home[MAXN+5];int main()
{int n;scanf("%d",&n);for(int i=1;i<=n;++i)scanf("%d",&home[i].s);for(int i=1;i<=n;++i)scanf("%d",&home[i].a);sort(home+1,home+1+n);for(int i=1;i<=n;++i){maxs[i]=max(maxs[i-1],home[i].s);suma[i]=suma[i-1]+home[i].a;}for(int i=n;i>=1;--i)s_and_a[i]=max(s_and_a[i+1],home[i].s*2+home[i].a);for(int i=1;i<=n;++i)printf("%d\n",max(maxs[i]*2+suma[i],s_and_a[i]+suma[i-1]));return 0;
}

后记

我的所有博客中(我还是写了不少的),阅读比较多的竟然是这几篇:

  • 巴拉巴拉(记不清名字了),是一道有点意思的黑题。
  • 这篇博客,是一道绿题……
  • 普林姆正确性的证明,而最小生成树的板题是黄色的……

我无话可说。您开心就好。

[NOIp2015]推销员相关推荐

  1. NOIP2015神奇的幻方

    题目描述 幻方是一种很神奇的 N∗N 矩阵:它由数字1,2,3,⋯⋯,N×N 构成,且每行.每列及两条对角线上的数字之和都相同. 当 N 为奇数时,我们可以通过下方法构建一个幻方: 首先将 1 写在第 ...

  2. BZOJ 4326 NOIP2015 运输计划(树上差分+LCA+二分答案)

    4326: NOIP2015 运输计划 Time Limit: 30 Sec  Memory Limit: 128 MB Submit: 1388  Solved: 860 [Submit][Stat ...

  3. cogs2109 [NOIP2015] 运输计划

    cogs2109 [NOIP2015] 运输计划 二分答案+树上差分. STO链剖巨佬们我不会(太虚伪了吧 首先二分一个答案,下界为0,上界为max{路径长度}. 然后判断一个答案是否可行,这里用到树 ...

  4. P2678 [NOIP2015 提高组] 跳石头

    P2678 [NOIP2015 提高组] 跳石头 题目背景 一年一度的"跳石头"比赛又要开始了! 题目描述 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选 ...

  5. 推销员(codevs 5126)

    题目描述 Description 阿明是一名推销员,他奉命到螺丝街推销他们公司的产品.螺丝街是一条死胡同,出口与入口是同一个,街道的一侧是围墙,另一侧是住户.螺丝街一共有N家住户,第i家住户到入口的距 ...

  6. NOIP2015普及组第1题 45 金币 方法三(python3实现)

    OpenJudge - 45:金币 信息学奥赛一本通(C++版)在线评测系统 [NOIP2015 普及组] 金币 - 洛谷 n=int( input() )x=1 #x为每天收到的金币数sum=0t= ...

  7. 信息学奥赛一本通 1890:【15NOIP提高组】跳石头 | 洛谷 P2678 [NOIP2015 提高组] 跳石头

    [题目链接] ybt 1890:[15NOIP提高组]跳石头 洛谷 P2678 [NOIP2015 提高组] 跳石头 ybt 1247:河中跳房子 OpenJudge NOI 1.11 10:河中跳房 ...

  8. 信息学奥赛一本通 1970:【15NOIP普及组】扫雷游戏 | OpenJudge NOI 1.8 14:扫雷游戏地雷数计算 | 洛谷 P2670 [NOIP2015 普及组] 扫雷游戏

    [题目链接] ybt 1970:[15NOIP普及组]扫雷游戏 OpenJudge NOI 1.8 14:扫雷游戏地雷数计算 洛谷 P2670 [NOIP2015 普及组] 扫雷游戏 [题目考点] 1 ...

  9. 信息学奥赛一本通 1100:金币 | 1969:【15NOIP普及组】金币 | OpenJudge NOI 1.5 45 | 洛谷 P2669 [NOIP2015 普及组] 金币

    [题目链接] ybt 1100:金币 ybt 1969:[15NOIP普及组]金币 OpenJudge NOI 1.5 45:金币 洛谷 P2669 [NOIP2015 普及组] 金币 [题目考点] ...

  10. 【NOIP2015】D2-T1跳石头,二分答案

    如果这道题没有写60分的堆加贪心而是二分,如果我在考试前我能写一道自己一直在躲避的二分答案,如果我能骗到第三题哪怕15分,结果都会不同,可惜没如果-- ------------------------ ...

最新文章

  1. C语言科学计算器思路,大神教你如何用C语言实现科学计算器
  2. 从编译原理看一个解释器的实现
  3. Robolectric
  4. python与excel表格-xlrd/xlwt - python与excel表格交互
  5. ora-01950 对表空间无权限
  6. SharpMap分析手记
  7. C#替换字符串起始/结尾指定的字符串
  8. 03. Java NIO Channel 通道
  9. 基于JAVA+SpringBoot+Mybatis+MYSQL的美食分享网站
  10. 若依如何调整首页左侧菜单栏宽度
  11. 简单的Net::FTP模块的简单应用
  12. RenderSettings 渲染设置
  13. nginx1.6.2编译安装
  14. java 调用bat脚本 等待返回_java程序调用bat脚本
  15. Word 2019 插入参考文献
  16. python中ipo是什么意思呢_ipo是什么意思呢?ipo是不是就是上市呢?
  17. 8086CPU指令系统——算术运算类指令
  18. 新版标准日本语中级_第二十六课
  19. IE地址栏发生改变,页面没有刷新而保留在原页面的解决方法
  20. 使用 Entrust 扩展包在 Laravel 5 中实现 RBAC 权限管理与安装配置

热门文章

  1. 什么是网络编程(一)
  2. 淘宝卖家过劳死VS跳楼死
  3. TLE 生成 Cesium CZML 卫星轨道数据
  4. css 大于号 标签_css选择器 ~ (波浪号)、+(加号)、(大于号)的用法解析和举例...
  5. java毫秒数_Java中的毫秒数
  6. win10系统20H2版本更新以后桌面底下弹出了对话框,说我们在加载你的信息流时遇到了问题?
  7. opc ua与opc da区别_OPC,OPCDA,OPCUA
  8. siebel运维管理
  9. Centos系统升级到7.6
  10. 我的拆机经历——戴尔灵越5570系列