首页 > 其他分享 >CSP历年复赛题-P2672 [NOIP2015 普及组] 推销员

CSP历年复赛题-P2672 [NOIP2015 普及组] 推销员

时间:2024-06-06 11:14:31浏览次数:6  
标签:NOIP2015 最大 疲劳 int 最大值 P2672 距离 住户 CSP

原题链接:https://www.luogu.com.cn/problem/P2672

题意解读:N家住户,每家住户与出入口距离是Si米,推销员每走1米疲劳值+1,向第i家住户推销疲劳值+Ai,推销员推销完原路返回出口,计算在向不同数量X的住户推销时,能达到的最大疲劳值。

解题思路:

本题是一种贪心选择问题,需要思考出可能的最优解,并取最大值。

最直观的思路,要计算给X个住户推销的最大疲劳值,取前X个疲劳值最大的住户即可,这样“总的疲劳值=x个最大疲劳值之和+前x住户最远距离*2”

但还有一种可能,如果在前X个最大疲劳值住户里,去掉一个疲劳值最小的,换一家在X以后的住户里“距离*2+疲劳值”最大的,这样总的疲劳值是可能更大的,这是“总的疲劳值=(X之后距离*2+疲劳值最大值) + 前X-1个最大疲劳值之和”

对以上两种情况计算的总疲劳值求max即可

为了加速“前x个最大疲劳值之和”,“前x个住户最远距离”,“x之后的距离*2+疲劳值最大值”的计算,可以定义三个数组并提前预处理:

p[i]:前i个最大的疲劳值Ai之和

s[i]:前i个最大的疲劳值住户中最远的距离

w[i]:第i个之后的住户“距离*2+疲劳值”最大值

预处理以上数组之后,x从1枚举到n,每次计算两种疲劳值并取max:

max(p[x] + s[x] * 2, w[x] + p[x-1])

100分代码:

#include <bits/stdc++.h>
using namespace std;

const int N = 100005;

struct node
{
    int s, a;
};
node q[N];
int n;
int p[N]; //p[i]:前i个最大的疲劳值Ai之和
int s[N]; //s[i]:前i个最大的疲劳值住户中最远的距离
int w[N]; //w[i]:第i个之后的住户“距离*2+疲劳值”最大值

bool cmp(node q1, node q2)
{
    return q1.a > q2.a; //按疲劳值从大到小排序
}

int main()
{
    cin >> n;
    for(int i = 1; i <= n; i++) cin >> q[i].s;
    for(int i = 1; i <= n; i++) cin >> q[i].a;

    sort(q + 1, q + n + 1, cmp);

    for(int i = 1; i <= n; i++) p[i] = p[i-1] + q[i].a;
    for(int i = 1; i <= n; i++) s[i] = max(s[i-1], q[i].s);
    for(int i = n; i >= 0; i--) w[i] = max(w[i+1], q[i].s * 2 + q[i].a);

    for(int x = 1; x <= n; x++) cout << max(p[x] + s[x] * 2, w[x] + p[x-1]) << endl;
}

 

标签:NOIP2015,最大,疲劳,int,最大值,P2672,距离,住户,CSP
From: https://www.cnblogs.com/jcwy/p/18234720

相关文章

  • CSP历年复赛题-P2671 [NOIP2015 普及组] 求和
    原题链接:https://www.luogu.com.cn/problem/P2671题意解读:找到所有符合条件的三元组,累加三元组的分数,结果对10007取模。解题思路:仔细读题,并分析数据规模,1~4个数据点可以通过O(n^2)复杂度解决,也就是枚举法。1、枚举法要求x<y<z,y−x=z−y,移项可得x+z=2*y,并且c......
  • 打卡信奥刷题(52)用Scratch图形化工具信奥P7909 [普及组] [CSP-J 2021] 分糖果
    [CSP-J2021]分糖果题目背景红太阳幼儿园的小朋友们开始分糖果啦!题目描述红太阳幼儿园有nnn个小朋友,你是其中之一。保证......
  • 2024年云计算、信号处理与网络技术国际学术会议(ICCCSPNT 2024)
    2024年云计算、信号处理与网络技术国际学术会议(ICCCSPNT2024)2024InternationalAcademicConferenceonCloudComputing,SignalProcessing,andNetworkTechnology(ICCCSPNT2024)会议简介:2024年云计算、信号处理与网络技术国际学术会议(简称ICCCSPNT2024)是一个集结了......
  • P5663 [CSP-J2019] 加工零件
    原题链接题解请仔细读题!!!如果1号工人需要提供原材料,那么代表\(a_i\to1\)存在一条长度为\(L_i\)的路径(可以重复走)由于重复走不会改变路径长度的奇偶性,所以一定存在一条奇偶性相同,且长度小于\(L_i\)的路径,所以只要求从点1出发到各个点奇偶最短路即可code#include<bits/......
  • [NOIP2015 提高组] 跳石头
    [NOIP2015提高组]跳石头跳石头题目描述一年一度的“跳石头”比赛又要开始了!这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石。组委会已经选择好了两块岩石作为比赛起点和终点。在起点和终点之间,有$N$块岩石(不含起点和终点的岩石)。在比赛过程中,选手们将从起点......
  • CSP历年复赛题-P1982 [NOIP2013 普及组] 小朋友的数字
    原题链接:https://www.luogu.com.cn/problem/P1982题意解读:特征值:第i个同学的特征值是1~i中最大子段和,分数:第i个同学分数是前1~i-1个同学的分数+特征值最大值,求最大分数。解题思路:第一步:先计算特征值f[i],f[i]等于1~i中所有数的最大子段和,所以借助最大子段和的DP方法,每次计算以i......
  • CSP历年复赛题-P1981 [NOIP2013 普及组] 表达式求值
    原题链接:https://www.luogu.com.cn/problem/P1981题意解读:中缀表达式求值,只有+,*,没有括号,保留后4位。解题思路:中缀表达式求值的典型应用,采用两个栈:符号栈、数字栈,对于没有括号的情况,只需要如下步骤:1、遍历表达式每一个字符2、如果遇到数字,则持续提取数字,保存整数到数字栈3、......
  • CSP历年复赛题-P1980 [NOIP2013 普及组] 计数问题
    原题链接:https://www.luogu.com.cn/record/160821231题意解读:统计1~n中x的个数。解题思路:枚举每个数,提取每一位,判断是否等于x。100分代码:#include<bits/stdc++.h>usingnamespacestd;intn,x,ans;intmain(){cin>>n>>x;for(inti=1;i<=n;i++)......
  • CSP历年复赛题-P1078 [NOIP2012 普及组] 文化之旅
    原题链接:https://www.luogu.com.cn/problem/P1078题意解读:1~n个国家,每个国家有自己的文化,不同国家文化可以相同,要从起点遍历到终点,已经学习过的文化不能重复学习,已经学习过的文化被某个文化歧视的国家也不能遍历,且不同国家之间有边,边有不同的距离,计算从起点到终点的最短路径。解......
  • 2024年第七届信息通信与信号处理国际会议(ICICSP 2024)即将召开!
    2024年第七届信息通信与信号处理国际会议(ICICSP2024)将于2024年9月21-23日在中国舟山举行。ICICSP2024是一个汇聚全球顶尖科研人才、探讨信息通信与信号处理领域最新科研成果和发展趋势的国际盛会。本次会议的主题涵盖了信号处理、多媒体信号处理、互联网技术等多个领域的前......