题目链接:https://www.luogu.org/problem/P2672

这道题目是贪心,贪心的思想是:

选择 \(m\) 户人家的最大疲劳值应该是以下两种方案中的较大值:

  • 方案一:选择 \(a[i]\) 最大的 \(m\) 户人家;
  • 方案二:选择 \(a[i]\) 最大的 \(m-1\) 户人家,以及剩下的 \(n-(m-1)\) 户人家中 \(2 \times s[i] + a[i]\) 最大的那户人家

所以,我们可以给 \(n\) 户人家按照 \(a[i]\) 从大到小金星排序。

然后在开三个数组(这3个数组用到了DP来进行求解):

  • suma[i] :表示 \(\sum_{j=1}^{i}a[j] + 2 \times \max_{j=1}^{i}(s[j])\) ,推导公式: suma[i] = suma[i-1] + a[i]
  • maxs[i] :表示 \(\max_{j=1}^{i} s[j]\) ,推导公式: maxs[i] = maxs[i-1] + s[i]
  • maxsa[i] :表示 \(\max_{j=i}^{n} (2 \times s[j] + a[j])\) ,推导公式:maxsa[i] = max(maxsa[i+1], 2 \times s[i] + a[i])

然后我们要在 \(n\) 户人家里面选择 \(m\) 户人家访问的最大疲劳值就是 sum[m] + 2 * maxs[m]suma[m-1] + 2 * maxs[i] 的较大值。

实现代码如下:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 100100;
int n, s[maxn], a[maxn], idx[maxn], suma[maxn], maxs[maxn], maxsa[maxn];
bool cmp(int i, int j) {
return a[i] > a[j];
}
int main() {
cin >> n;
for (int i = 1; i <= n; i ++) cin >> s[i];
for (int i = 1; i <= n; i ++) cin >> a[i];
for (int i = 1; i <= n; i ++) idx[i] = i;
sort(idx+1, idx+1+n, cmp);
for (int i = 1; i <= n; i ++)
suma[i] = suma[i-1] + a[idx[i]], maxs[i] = max(maxs[i-1], s[idx[i]]);
for (int i = n; i >= 1; i --)
maxsa[i] = max(maxsa[i+1], s[idx[i]] * 2 + a[idx[i]]);
for (int i = 1; i <= n; i ++)
cout << max(suma[i]+2*maxs[i], suma[i-1]+maxsa[i]) << endl;
return 0;
}

洛谷P2672 推销员 题解 贪心的更多相关文章

  1. 洛谷p2672推销员题解

    日常扯废话: 话说题解里的思路都写得真的是很奈斯啊 但是 代码看不懂确实让人头疼(可能是我太弱了) 就像题解里的第一篇题解代码简洁但是属实看不明白 趁着学姐刚给我讲了知识还热乎赶紧给泥萌说说哈 正文: ...

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

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

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

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

  4. 洛谷P2672 推销员

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

  5. 洛谷 P2672 推销员

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

  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. LUOGU P1512 伊甸园日历游戏

    题目描述 Adam和Eve玩一个游戏,他们先从1900.1.1到2001.11.4这个日期之间随意抽取一个日期出来.然后他们轮流对这个日期进行操作: 1 : 把日期的天数加1,例如1900.1.1变到 ...

  2. HR招聘_(五)_招聘方法论(电话邀约)

    .主动候选人 这部分候选人通过职位广告直接投递,大多对公司意愿度高(排除少数海投候选人),所以电话中一般需要了解如下信息: 目前状态,在职还是离职: 离职原因以及真实诉求: 岗位职责和团队情况: 薪资 ...

  3. 关于background-image调整大小和位置的方法笔记

    遇到background-image的问题有点多,直接上网搜资料自己整理一下 <!DOCTYPE html> <html lang="en"> <he ...

  4. Hdu 1045 二分匹配

    题目链接 Fire Net Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  5. Hdu 1299

    Diophantus of Alexandria Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java ...

  6. IntelliJ IDEA 下的SVN使用(傻瓜式教学)(转)

    第一步:下载svn的客户端,通俗一点来说就是小乌龟啦!去电脑管理的软件管理里面可以直接下载,方便迅速 下载之后直接安装就好了,但是要注意这里的这个文件也要安装上,默认是不安装的,如果不安装,svn中的 ...

  7. yii常用操作数据

    yii常用操作数据.php <?php defined('YII_DEBUG') or define('YII_DEBUG', true); //当在调试模式下,应用会保留更多日志信息,如果抛出 ...

  8. phpinfo空白

    <?php phpinfo(); ?> 以上代码放入一个kk.php的文件里,但浏览器显示是空白. 原因: 检查php.ini文件里 disable_functions =后面有没有限制p ...

  9. pl/sql基础知识—定义并使用变量

    n  介绍 在编写pl/sql程序是,可以定义变量和常量:在pl/sql程序中包括有: ①标量类型(scalar) ②复合类型(composite) ③参照类型(reference) ④lob(lar ...

  10. C++模板进阶指南:SFINAE

    C++模板进阶指南:SFINAE 空明流转(https://zhuanlan.zhihu.com/p/21314708) SFINAE可以说是C++模板进阶的门槛之一,如果选择一个论题来测试对C++模 ...