[bzoj2151][贪心]种树

贪心算法训练(五)——种树(区间选点问题) 1. 问题描述  一条街道的一边有几座房子,因为环保原因居民想要在路边种些树,路边的地区被分割成 n 块,并被编号为 1…n,每块大小为一个单位尺寸并最多可以种一棵树,每个居民想在门前种些树并指定了三个数 b,e,t 这三个数分别表示该居民想在 b 和 e 之间最少种 t 棵树,当然,b 阅读详情

Description

A城市有一个巨大的圆形广场,为了绿化环境和净化空气,市政府决定沿圆形广场外圈种一圈树。园林部门得到指令后,初步规划出n个种树的位置,顺时针编号1到n。并且每个位置都有一个美观度Ai,如果在这里种树就可以得到这Ai的美观度。但由于A城市土壤肥力欠佳,两棵树决不能种在相邻的位置(i号位置和i+1号位置叫相邻位置。值得注意的是1号和n号也算相邻位置!)。最终市政府给园林部门提供了m棵树苗并要求全部种上,请你帮忙设计种树方案使得美观度总和最大。如果无法将m棵树苗全部种上,给出无解信息。

Input

输入的第一行包含两个正整数n、m。第二行n个整数Ai。

Output

输出一个整数,表示最佳植树方案可以得到的美观度。如果无解输出“Error!”,不包含引号。

Sample Input

【样例输入1】

7 3

1 2 3 4 5 6 7

【样例输入2】

7 4

1 2 3 4 5 6 7

Sample Output

【样例输出1】

15

【样例输出2】

Error!

HINT

【数据规模】

对于全部数据:m<=n;

-1000<=Ai<=1000

N的大小对于不同数据有所不同:

数据编号 N的大小 数据编号 N的大小

1 30 11 200

2 35 12 2007

3 40 13 2008

4 45 14 2009

5 50 15 2010

6 55 16 2011

7 60 17 2012

8 65 18 199999

9 200 19 199999

10 200 20 200000

题解

相似与bzoj1150,只不过这道题算是那道题的弱化版。。
因为给出的序列无需考虑边界问题2333
老做法,堆维护队列。记录一下这个点的权以及位置
当取出一个点的时候,加入一个新点进堆。新点的权为他左边那个点的权+右边那个点的权-取出点的权。如果取旁边两个比取当前这个更优的话,那么下一次就会取到新加入那个点了,同时维护了贪心。

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
struct node
{
    int c,u;
    friend bool operator <(node n1,node n2){return n1.c<n2.c;}
};//值 位置 
priority_queue<node> q;
int n,m,col[210000],pre[210000],nxt[210000],del[210000];
int sum[210000];
int main()
{
    memset(del,0,sizeof(del));
    scanf("%d%d",&n,&m);
    if(n<m*2){printf("Error!\n");return 0;}
    for(int i=1;i<=n;i++)scanf("%d",&col[i]),pre[i]=i-1,nxt[i]=i+1,sum[i]=col[i];
    pre[1]=n;nxt[n]=1;
    for(int i=1;i<=n;i++)
    {
        node tmp;
        tmp.c=col[i];tmp.u=i;
        q.push(tmp);
        //printf("%d\n",q.top().c);
    }
    int ans=0;
    for(int i=1;i<=m;i++)
    {
        node tmp=q.top();
        while(del[tmp.u]!=0)q.pop(),tmp=q.top();
        ans+=tmp.c;q.pop();
        int l=pre[tmp.u],r=nxt[tmp.u],cnt=0;
        //把前后一条删掉,加入最大值为suml+sumr-sumu的线段,位置为tmp.u 
        del[l]=1;cnt+=sum[l];
        pre[tmp.u]=pre[l];nxt[pre[l]]=tmp.u;
        del[r]=1;cnt+=sum[r];
        nxt[tmp.u]=nxt[r];pre[nxt[r]]=tmp.u;
        node P;
        P.u=tmp.u;P.c=cnt-tmp.c;del[tmp.u]=0;
        sum[P.u]=P.c;
        q.push(P);
    }
    printf("%d\n",ans);
    return 0;
}
BZOJ 2151 种树(可反悔贪心,链表)【BZOJ千题计划】就图一乐 【BZOJ修复计划 #16】BZOJ 2151 种树【国家集训队2011】 阅读详情

相关推荐

max超级种树插件

ch——FOREST_PACK.PRO_4.0.2.352X64max 插件 种植树木,场景环境美化,等

Leetcode605. 种花问题

Leetcode605. 种花问题

ProgramNovice的博客 796

3dmax插件神器-019-全模种树.mse

3dmax插件神器-019-全模种树.mse

3DMAX森林树木植物插件ForestPackLite教程

3DMAX森林树木植物插件ForestPackLite教程

沐风老师 5018

医疗AI Agent实战:从零搭建一个能看病的智能助手(附完整代码)

本文详细介绍了如何从零搭建一个医疗AI Agent智能助手,涵盖核心架构设计、症状推理引擎开发、安全与合规实现以及系统集成等关键环节。通过完整的代码示例和实战案例,帮助开发者快速构建具备医疗咨询能力的智能Agent,提升医疗服务的效率和质量。

ss78901的博客 467

ubuntu 24.04安装ros1 noetic

上面是参考链接给的修改内容。除了上面要修改的地方,我在编译的生活还有一个地方报错,修改成如下形式。因为我已经对文件rosconsole_log4cxx.cpp作了上面的修改,所有是不是188行不太确认了,如果报“log4cxx::spi::LocationInfo”问题,按照下面修改就可以了。我在编译时还报了一个问题,就是我之前安装的是jazzy。所以在编译时会报ros变量名不对,这时对变量名做修改就可以了。具体怎么修改,百度。a、将源文件中所有CMakelist中编译标准改为c++ 17.

yangpan011的博客 3203

【BZOJ2151】种树(贪心)

【BZOJ2151】种树(贪心) 题面 BZOJ 题解 如果没有相邻不能选的限制,那么这就是一道傻逼题。 只需要用一个堆维护一下就好了。 现在加上了相邻点的限制,那么我们就对于当前位置加入一个撤销操作。 怎么撤销呢? 如果我们选择了一个点,那么我们就把他前后两个位置删去, 然后将当前点合并为\(a[last]+a[next]-a[now]\)的权值。 如果下次选择了这个位置的话,就可以认为撤销了选...

weixin_30553065的博客 84

拆解一个800G光模块:手把手带你认识里面的MT插芯和光纤阵列(FA)

本文详细拆解了800G光模块中的关键组件MT插芯和光纤阵列(FA),揭示了并行光学技术如何实现高速数据传输。通过显微镜下的精密观察,展示了MT插芯的高精度构造和光纤阵列的连接奥秘,同时解析了高精度研磨工艺对光信号传输的重要性。这些微型组件是高速收发模块实现800Gbps带宽的核心技术。

weixin_30839881的博客 1549

BZOJ 2151 种树 贪心

2151: 种树 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 711  Solved: 396[Submit][Status][Discuss]A城市有一个巨大的圆形广场,为了绿化环境和净化空气,市政府决定沿圆形广场外圈种一圈树。园林部门得到指令后,初步规划出n个种树的位置,顺时针编号1到n。并且每个位置都有一个美观度Ai,如果在这里种树就可以得

Loi_Vampire的博客 1182

Notion卡顿救星:3分钟搞定DNS优化,手机电脑全平台加速指南

本文针对Notion访问慢和卡顿问题,提供了全平台DNS优化与Hosts文件修改的详细指南。通过更换优质DNS服务器或建立静态IP映射,可有效解决因网络延迟和域名解析导致的加载缓慢,实现手机与电脑端的快速加速,提升Notion使用流畅度。

v6b7n8m9q0的博客 1306

【python股票价格预测】基于LSTM(长短期记忆网络)的股票价格预测(附python代码)

【python股票价格预测】基于LSTM(长短期记忆网络)的股票价格预测(附python代码)

k8291121的博客 1012

bzoj 2151 种树 贪心+堆

题面 题目传送门 解法 堆用来撤销之前操作的经典应用 显然可以选择dp,但是复杂度好像不太对,应该是O(nm)O(nm)O(nm)的 一个比较显然的贪心是,每一次选择最大的那一个,然后一直这样取下去 很明显, 这个贪心是错误的:19 20 19 1 按照上面的贪心策略,我们会先选择20,然后再选择1。显然,这个方案没有19+19优 所以,我们现在要考虑如何“撤销”之前错误的选择方案 ...

mysterynoip的博客 285

Android16 RK3576 Bluetooth source和sink模式切换

摘要:本文介绍了在RK3576平台上实现蓝牙A2DP模式动态切换的修改方案。通过在device配置文件中添加A2DP Sink相关属性,修改Bluetooth模块代码实现:1)在Config.java中增加persist.bluetooth.rka2dpsink属性控制模式切换;2)修改A2dpSinkStreamHandler.java取消音频焦点限制;3)调整btif_a2dp_sink.cc默认授予音频焦点。最终通过设置persist.bluetooth.rka2dpsink属性为true/false

tzj1058756809的博客 860

[BZOJ2151] 种树 贪心

2151: 种树 Time Limit:10 SecMemory Limit:259 MBSubmit:1151Solved:613[Submit][Status][Discuss] Description A城市有一个巨大的圆形广场,为了绿化环境和净化空气,市政府决定沿圆形广场外圈种一圈树。园林部门得到指令后,初步规划出n个种树的位置,顺时针编号1到n。并且每个位置...

weixin_30502157的博客 102

英飞凌TC3xx之一起认识GTM系列(一)先来认识GTM架构

本文讲述英飞凌TC3xx的通用计时器GTM的架构。

无所适从的我的博客 4596

马达种类全解析:VCM、Stepper、Piezo 在手机相机中的驱动原理与工程差异

在现代手机影像系统中,马达承担着核心成像组件的动态调节任务,如自动对焦(AF)、光学防抖(OIS)以及变焦调节。目前主流采用三类驱动器件:VCM(Voice Coil Motor)、Stepper(步进马达)、Piezo(压电马达)。不同马达方案在结构复杂度、响应速度、功耗、驱动方式与模组厚度适配等方面差异显著,对成像系统的性能表现有直接影响。本文将结合最新旗舰设备的应用现状,系统剖析这三类驱动马达的工作原理、架构特点与工程应用经验,为工程实践中选型与调试提供参考。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 3779

bzoj 2151 种树——贪心+后悔

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2151 似乎是半年+前讲过的。(然而看到的时候却不会了) 考虑贪心,限制就是不能选两边的。如果选了最大的又要反悔,一定不可能是要只选旁边的一个,而是把两个都选了; 所以选了这个以后,把两边的打上标记表示不能选,往堆里加入一个值为 两边的值-自己的值 的元素表示反悔选择即可。 维护两边是...

weixin_33806914的博客 161

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【BZOJ 2151】 2151: 种树 (贪心+堆+双向链表)

2151: 种树 Description A城市有一个巨大的圆形广场,为了绿化环境和净化空气,市政府决定沿圆形广场外圈种一圈树。园林部门得到指令后,初步规划出n个种树的位置,顺时针编号1到n。并且每个位置都有一个美观度Ai,如果在这里种树就可以得到这Ai的美观度。但由于A城市土壤肥力欠佳,两棵树决不能种在相邻的位置(i号位置和i+1号位置叫相邻位置。值得注意的是1号和n号...

weixin_30687587的博客 84

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【BZOJ2151】种树(堆,贪心)

Description A城市有一个巨大的圆形广场,为了绿化环境和净化空气,市政府决定沿圆形广场外圈种一圈树。园林部门得到指令后,初步规划出n个种树的位置,顺时针编号1到n。并且每个位置都有一个美观度Ai,如果在这里种树就可以得到这Ai的美观度。但由于A城市土壤肥力欠佳,两棵树决不能种在相邻的位置(i号位置和i+1号位置叫相邻位置。值得注意的是1号和n号也算相邻位置!)。最终市政府给园林部门提供...

დ♂Hany01's Blog Space♂ღ 349

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

bzoj 2151 种树(贪心+堆)(经典)

思路: 看到题,第一反应就是搜索,学了一年,还太水。。看了大神的博客。如下: 分析: 首先考虑如果没有“相邻位置不能都种”这一限制会怎么样。这时就是一个裸的贪心——按照A[i]从大到小排序,然后取前M个。 那么加上限制以后会发生什么呢?

sunny crazy 3059

【bzoj2151】【种树】【堆+贪心】

DescriptionA城市有一个巨大的圆形广场,为了绿化环境和净化空气,市政府决定沿圆形广场外圈种一圈树。园林部门得到指令后,初步规划出n个种树的位置,顺时针编号1到n。并且每个位置都有一个美观度Ai,如果在这里种树就可以得到这Ai的美观度。但由于A城市土壤肥力欠佳,两棵树决不能种在相邻的位置(i号位置和i+1号位置叫相邻位置。值得注意的是1号和n号也算相邻位置!)。最终市政府给园林部门提供了m棵

sunshinezff的专栏 1777

[bzoj 2151]种树(贪心)

题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2151 分析:原型是bzoj 1150(CTSC 2007) 首先DP无法下手,想到贪心。想到贪心的第一感觉就是从大的开始取,但明显有反例,最烦的就是一个大的旁边旁边两个也很大,导致如果取了那两个最后结果更大。解决的办法就是每次取最大的同时,把它同旁边两个点合并成一个点,权值取:左+右-中间...

weixin_30614109的博客 114

BZOJ2151 种树 [贪心+链表]

Description A城市有一个巨大的圆形广场,为了绿化环境和净化空气,市政府决定沿圆形广场外圈种一圈树。 园林部门得到指令后,初步规划出n个种树的位置,顺时针编号1到n。并且每个位置都有一个美观度Ai,如果在这里种树就可以得到这Ai的美观度。但由于A城市土壤肥力欠佳,两棵树决不能种在相邻的位置(i号位置和i+1号位置叫相邻位置。值得注意的是1号和n号也算相邻位置!)。 最终市政府给园林部门提...

weixin_34358365的博客 157

洛谷1484 BZOJ2151 种树 贪心+堆

题目链接 洛谷题意: 给你一个长度为n的序列,每个位置有一个权值,相邻位置不能同时被选,问你选k个数得到的最大权值是多少(可以选的数不足k个)。 BZOJ题意:把洛谷的序列改成环,并且要判断无解情况,但是必须选足k个数。 题目差不多。 这是一个比较经典的题目,这题不难想出可以n^2dp,但是好像没法优化。我们考虑贪心,记录每个点左侧和右侧的点是哪个点,然后记录每个点的点权和每个点是否被考...

forever_shi的博客 298
上一篇: [bzoj2140][强联通]稳定婚姻
下一篇: [bzoj2875][矩阵乘法]随机数生成器
Rose_max
博客等级 码龄10年 97粉丝 610原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值