[NOIp2015]推销员
题目
传送门 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 。
因为不走回头路,所以行走的疲劳值只有 2maxx∈XSx2\max_{x\in X} S_x2maxx∈XSx ,而推销疲劳值为 ∑x∈XAx\sum_{x\in X}A_x∑x∈XAx ,所以有:
ans=2maxx∈XSx+∑x∈XAxans=2\max_{x\in X}S_x+\sum_{x\in X}A_x ans=2x∈XmaxSx+x∈X∑Ax
注意到 maxx∈XSx\max_{x\in X}S_xmaxx∈XSx 的变化是非常难的,所以,我们不妨假设一组解。其深层原因是,我们要最大化 ansansans,恰好它是由 maxSx\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]推销员相关推荐
- NOIP2015神奇的幻方
题目描述 幻方是一种很神奇的 N∗N 矩阵:它由数字1,2,3,⋯⋯,N×N 构成,且每行.每列及两条对角线上的数字之和都相同. 当 N 为奇数时,我们可以通过下方法构建一个幻方: 首先将 1 写在第 ...
- BZOJ 4326 NOIP2015 运输计划(树上差分+LCA+二分答案)
4326: NOIP2015 运输计划 Time Limit: 30 Sec Memory Limit: 128 MB Submit: 1388 Solved: 860 [Submit][Stat ...
- cogs2109 [NOIP2015] 运输计划
cogs2109 [NOIP2015] 运输计划 二分答案+树上差分. STO链剖巨佬们我不会(太虚伪了吧 首先二分一个答案,下界为0,上界为max{路径长度}. 然后判断一个答案是否可行,这里用到树 ...
- P2678 [NOIP2015 提高组] 跳石头
P2678 [NOIP2015 提高组] 跳石头 题目背景 一年一度的"跳石头"比赛又要开始了! 题目描述 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选 ...
- 推销员(codevs 5126)
题目描述 Description 阿明是一名推销员,他奉命到螺丝街推销他们公司的产品.螺丝街是一条死胡同,出口与入口是同一个,街道的一侧是围墙,另一侧是住户.螺丝街一共有N家住户,第i家住户到入口的距 ...
- NOIP2015普及组第1题 45 金币 方法三(python3实现)
OpenJudge - 45:金币 信息学奥赛一本通(C++版)在线评测系统 [NOIP2015 普及组] 金币 - 洛谷 n=int( input() )x=1 #x为每天收到的金币数sum=0t= ...
- 信息学奥赛一本通 1890:【15NOIP提高组】跳石头 | 洛谷 P2678 [NOIP2015 提高组] 跳石头
[题目链接] ybt 1890:[15NOIP提高组]跳石头 洛谷 P2678 [NOIP2015 提高组] 跳石头 ybt 1247:河中跳房子 OpenJudge NOI 1.11 10:河中跳房 ...
- 信息学奥赛一本通 1970:【15NOIP普及组】扫雷游戏 | OpenJudge NOI 1.8 14:扫雷游戏地雷数计算 | 洛谷 P2670 [NOIP2015 普及组] 扫雷游戏
[题目链接] ybt 1970:[15NOIP普及组]扫雷游戏 OpenJudge NOI 1.8 14:扫雷游戏地雷数计算 洛谷 P2670 [NOIP2015 普及组] 扫雷游戏 [题目考点] 1 ...
- 信息学奥赛一本通 1100:金币 | 1969:【15NOIP普及组】金币 | OpenJudge NOI 1.5 45 | 洛谷 P2669 [NOIP2015 普及组] 金币
[题目链接] ybt 1100:金币 ybt 1969:[15NOIP普及组]金币 OpenJudge NOI 1.5 45:金币 洛谷 P2669 [NOIP2015 普及组] 金币 [题目考点] ...
- 【NOIP2015】D2-T1跳石头,二分答案
如果这道题没有写60分的堆加贪心而是二分,如果我在考试前我能写一道自己一直在躲避的二分答案,如果我能骗到第三题哪怕15分,结果都会不同,可惜没如果-- ------------------------ ...
最新文章
- C语言科学计算器思路,大神教你如何用C语言实现科学计算器
- 从编译原理看一个解释器的实现
- Robolectric
- python与excel表格-xlrd/xlwt - python与excel表格交互
- ora-01950 对表空间无权限
- SharpMap分析手记
- C#替换字符串起始/结尾指定的字符串
- 03. Java NIO Channel 通道
- 基于JAVA+SpringBoot+Mybatis+MYSQL的美食分享网站
- 若依如何调整首页左侧菜单栏宽度
- 简单的Net::FTP模块的简单应用
- RenderSettings 渲染设置
- nginx1.6.2编译安装
- java 调用bat脚本 等待返回_java程序调用bat脚本
- Word 2019 插入参考文献
- python中ipo是什么意思呢_ipo是什么意思呢?ipo是不是就是上市呢?
- 8086CPU指令系统——算术运算类指令
- 新版标准日本语中级_第二十六课
- IE地址栏发生改变,页面没有刷新而保留在原页面的解决方法
- 使用 Entrust 扩展包在 Laravel 5 中实现 RBAC 权限管理与安装配置
热门文章
- 什么是网络编程(一)
- 淘宝卖家过劳死VS跳楼死
- TLE 生成 Cesium CZML 卫星轨道数据
- css 大于号 标签_css选择器 ~ (波浪号)、+(加号)、(大于号)的用法解析和举例...
- java毫秒数_Java中的毫秒数
- win10系统20H2版本更新以后桌面底下弹出了对话框,说我们在加载你的信息流时遇到了问题?
- opc ua与opc da区别_OPC,OPCDA,OPCUA
- siebel运维管理
- Centos系统升级到7.6
- 我的拆机经历——戴尔灵越5570系列