日常扯废话:

话说题解里的思路都写得真的是很奈斯啊

但是

代码看不懂确实让人头疼(可能是我太弱了)

就像题解里的第一篇题解代码简洁但是属实看不明白

趁着学姐刚给我讲了知识还热乎赶紧给泥萌说说哈

正文:

题面

思路就是贪心,使劲贪。

其实我主要是来补充一下具体的代码解释

for (int i = n; i >= ; i--)
maxsum[i] = max (maxsum[i + ], * e[i].s + e[i].v);

这个maxsum数组存储了v由大到小, 注意是要倒着存储的。关于为什么V要从大到小因为我们有一个前缀和啊, 嗯?前缀和?对的!看 后边就懂啦!

for (int i = ; i <= n; i++)
sumv[i] = sumv[i - ] + e[i].v;

这就是我们的前缀和数组, 这个数组是存储了我们从起点走到i这个位置的时候所有的经过过的人家推销所需要的疲劳值

for (int i = ; i <= n; i++)
maxs[i] = max (maxs[i - ], e[i].s);

而这个数组则存储了当前走到的最远距离

for (int i = ; i <= n; i++)
printf ("%d\n", max (sumv[i - ] + maxsum[i], sumv[i] + * maxs [i]));

这两行可以说是我最难理解的地方了

考虑两种情况, 第一种情况前i - 1个位置所有拜访过的疲劳值再加上最大的V, 第二种情况则为所有的v再加上最远的距离的两倍

为什么会是这两种情况, 因为最大的v可能与最远的距离不同(我的语文常年垫底), 自己举一个例子可能会更直观。

干净一点的代码:

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = ;
int n, maxsum[N], maxs[N], sumv[N];
struct node {
int s, v;
}e[N];
bool cmp (node x, node y) {
return x.v > y.v;
}
int main () {
scanf ("%d", &n);
for (int i = ; i <= n; i++)
scanf ("%d", &e[i].s);
for (int i = ; i <= n; i++)
scanf ("%d", &e[i].v);
sort (e + , e + + n, cmp);
for (int i = n; i >= ; i--)
maxsum[i] = max (maxsum[i + ], * e[i].s + e[i].v);
for (int i = ; i <= n; i++)
maxs[i] = max (maxs[i - ], e[i].s);
for (int i = ; i <= n; i++)
sumv[i] = sumv[i - ] + e[i].v;
for (int i = ; i <= n; i++)
printf ("%d\n", max (sumv[i - ] + maxsum[i], sumv[i] + * maxs [i]));
return ;
}

谢谢收看, 祝身体健康!

洛谷p2672推销员题解的更多相关文章

  1. 洛谷P2672 推销员 题解 贪心

    题目链接:https://www.luogu.org/problem/P2672 这道题目是贪心,贪心的思想是: 选择 \(m\) 户人家的最大疲劳值应该是以下两种方案中的较大值: 方案一:选择 \( ...

  2. 洛谷 P2672 推销员 解题报告

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

  3. 洛谷P2672 推销员

    沙雕贪心...... 我一开始想的是倒着来,每次减去一个. 然后我们就有两个决策:去掉最后一个/去掉前面某一个. 然后第一个决策用并查集维护,第二个决策用线段树即可.仔细想想觉得普及组不会考这种东西, ...

  4. 洛谷 P2672 推销员

    题目传送门 解题思路: 我们会发现本题有一个特性,就是如果我们走到一个更远的地方,那么近的地方距离原点的距离我们可以忽略. 本题要求最大的疲劳值,所以我们需要排序,第一个想到堆,反正我是先想到堆. 然 ...

  5. 洛谷 P2672 推销员(贪心,模拟)

    传送门 解题思路 第一种: 对于选i家,很显然,a值前i-1家的一定会选,所以只需要考虑最后一家的选法.要么是选择a值第i大的(就不管s了),要么选择剩下的中s最大的. 我们把每一家的情况(s和a)存 ...

  6. 洛谷NOIp热身赛题解

    洛谷NOIp热身赛题解 A 最大差值 简单树状数组,维护区间和.区间平方和,方差按照给的公式算就行了 #include<bits/stdc++.h> #define il inline # ...

  7. 洛谷P2827 蚯蚓 题解

    洛谷P2827 蚯蚓 题解 题目描述 本题中,我们将用符号 ⌊c⌋ 表示对 c 向下取整. 蛐蛐国最近蚯蚓成灾了!隔壁跳蚤国的跳蚤也拿蚯蚓们没办法,蛐蛐国王只好去请神刀手来帮他们消灭蚯蚓. 蛐蛐国里现 ...

  8. 洛谷P1816 忠诚 题解

    洛谷P1816 忠诚 题解 题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人 ...

  9. [POI 2008&洛谷P3467]PLA-Postering 题解(单调栈)

    [POI 2008&洛谷P3467]PLA-Postering Description Byteburg市东边的建筑都是以旧结构形式建造的:建筑互相紧挨着,之间没有空间.它们共同形成了一条长长 ...

随机推荐

  1. docker compose项目

    本文参考: https://www.cnblogs.com/jmcui/p/9395375.html https://www.cnblogs.com/jmcui/p/9512795.html 1.Do ...

  2. 8、VUE自定义组件

    1.为什么要使用自定义组件? 自定义组件是用来封装复杂的内容,提高可重用性,比如封装复杂的表格组件.日历组件.图片轮播组件等. 2.自定义组件 2.1. 全局组件 全局组件是每个Vue对象都能使用的组 ...

  3. 一步一步学Spring Boot 2 微服务项目实战 - 黄文毅-2018年8月第一次印刷

    properties 配置文件的优先级高于.yml .在properties文件中配置了server.port=8080 同时在.yml中配置了server.port=8090  Spring Boo ...

  4. Javascript数组原型方法大全以及实例!!

    数组的方法有数组原型方法,也有从object对象继承来的方法,这里我们只介绍数组的原型方法,数组原型方法主要有以下这些: join() push()和pop() shift() 和 unshift() ...

  5. CENTOS7-JAVA模拟CPU占用高及排查( 转)

    环境 centos7 1核2GB Java8 模拟cpu占用高 新建一个名为jvm-learn的springboot项目 模拟代码如下 import org.springframework.boot. ...

  6. Cheat Engine 人造指针

    打开游戏 查看内存区域 查看游戏当前使用的内存区域 下面这一段是游戏当前使用的内存区域,选择一片可以读写的内存区域 跳转到这片内存 查看是否有空余内存可以使用 使用空闲内存 我们选择0075DFD0开 ...

  7. MAC PHP7 如何disable xdebug

    1. 查看xdebug当前状态是否是enable 打开terminal,输入: php -m | grep xdebug terminal返回xdebug,说明现在xdebug是enable状态. 2 ...

  8. 宝塔面板1G内存安装mysql5.7提示“至少需要XX兆内存”的解决办法

    打开文件:/www/server/panel/class/panelPlugin.py 搜索关键词:“至少” (可能在134行) 然后把这行if语句注释掉,如下图:

  9. Docker搭建Redis

    1.拉取redis镜像: docker pull redis 2.创建容器: docker run -d --restart=always -v /opt/redis/data:/data --nam ...

  10. 【解决】挂载NFS服务时,不同共享客户端间的数据不同步

    问题现象 当您用台 ECS 挂载同一个 NFS 文件系统,在 ECS-A 上 append 写文件,在 ECS-B 用 tail -f 观察文件内容的变化.在 ECS-A 写完之后,在 ECS-B 看 ...