链接:https://ac.nowcoder.com/acm/contest/917/E
来源:牛客网

题目描述

水宝宝驾驶着毁灭号接近了勇者号舰桥。

他要使用毁灭号的等离子炮摧毁勇者号主控台。

但是操控等离子炮的程序出了点问题。等离子炮有n个操作信号,第i个操作信号的强度为b[i]。总体强度为各操作信号的强度之和。

由于有些信号太弱了了 (强度<0),水宝宝想把它们删除。但是水宝宝自己不会删除信号,所以他找来了同船的队友帮忙。

有 m位队友,第ii 位队友只会删除编号在 L[i] 和 R[i]之间的信号,且每删除一个信号,花费 C[i]格能量。飞船一共有 k格能量,问他在请队友删除完信号后,总体强度最大是多少。
其实就是一个01背包  但是删除的代价 w 是有很多的(很多人的叠加)  只需要用线段树维护最小代价  然后再01背包一次就可以了

#include<bits/stdc++.h>
using namespace std;
//input by bxd
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define repp(i,a,b) for(int i=(a);i>=(b);--i)
#define RI(n) scanf("%d",&(n))
#define RII(n,m) scanf("%d%d",&n,&m)
#define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define RS(s) scanf("%s",s);
#define ll long long
#define pb push_back
#define inf 0x3f3f3f3f
#define CLR(A,v)  memset(A,v,sizeof A)
//
const int N=1e5+5;
int sum[N<<2],col[N<<2],w[N],c[N],k,m,n,dp[N],ans;
#define lson l,m,pos<<1
#define rson m+1,r,pos<<1|1void up(int pos)
{sum[pos]=min(sum[pos<<1],sum[pos<<1|1]);
}
void down(int pos)
{sum[pos<<1]=min(sum[pos<<1],col[pos]);sum[pos<<1|1]=min(sum[pos<<1|1],col[pos]);col[pos<<1]=min(col[pos<<1],col[pos]);col[pos<<1|1]=min(col[pos<<1|1],col[pos]);col[pos]=inf;
}
void build(int l,int r,int pos)
{col[pos]=inf;if(l==r){sum[pos]=inf;return ;}int m=(l+r)>>1;build(lson);build(rson);up(pos);
}
void update(int L,int R,int v,int l,int r,int pos)
{if(L<=l&&r<=R){sum[pos]=min(sum[pos],v);col[pos]=min(col[pos],v);return ;}down(pos);int m=(l+r)>>1;if(L<=m)update(L,R,v,lson);if(R>m)update(L,R,v,rson);up(pos);
}
void query(int L,int R,int l,int r,int pos)
{if(l==r){w[l]=sum[pos];return ;}int m=(l+r)>>1;down(pos);if(L<=m)query(L,R,lson);if(R>m)query(L,R,rson);up(pos);
}
int main()
{RIII(n,k,m);rep(i,1,n)RI(c[i]),ans+=c[i];build(1,n,1);rep(i,1,m){int u,w,v;RIII(u,w,v);update(u,w,v,1,n,1);}query(1,n,1,n,1);rep(i,1,n)repp(j,k,0)if(j>=w[i])dp[j]=max(dp[j],dp[j-w[i]]-c[i]);cout<<ans+dp[k];return 0;
}

View Code

转载于:https://www.cnblogs.com/bxd123/p/11027224.html

希望 线段树 01背包相关推荐

  1. 【TJOI2016】【bzoj4552】排序(二分答案+线段树01排序)

    problem 给出一个1到n的全排列,现在对这个全排列序列进行m次局部排序 排序分为两种 1:(0,l,r)表示将区间[l,r]的数字升序排序 2:(1,l,r)表示将区间[l,r]的数字降序排序 ...

  2. 洛谷P2073 送花 [2017年6月计划 线段树01]

    P2073 送花 题目背景 小明准备给小红送一束花,以表达他对小红的爱意.他在花店看中了一些花,准备用它们包成花束. 题目描述 这些花都很漂亮,每朵花有一个美丽值W,价格为C. 小明一开始有一个空的花 ...

  3. 【题解】【LibreOJ Round #6】花团 LOJ 534 时间线段树分治 背包

    Prelude 题目链接:萌萌哒传送门(/≧▽≦)/ Solution 如果完全离线的话,可以直接用时间线段树分治来做,复杂度\(O(qv \log q)\). 现在在线了怎么办呢? 这其实是个假在线 ...

  4. 一些算法(最短路,线段树,01,完全背包,STL)的基本参考资料

    bellman-ford算法 资料链接http://hi.baidu.com/kerrynit/item/f16bfbd465dc6b87270ae772 STL 资料链接http://net.pku ...

  5. 线段树分裂与合并 ----- P2824 [HEOI2016/TJOI2016]排序 [线段树分裂合并 OR 01序列排序+二分线段树]

    题目链接 题目大意: 对一个序列,每次按照升序或者降序排序序列某一段,问你最后的序列是什么? 解法1:二分+线段树 首先我们知道对一个01序列进行排序是很快的!我们只要知道里面有多少个1和多少个0,那 ...

  6. 【HDU - 5649】DZY Loves Sorting(线段树,区间更新区间查询,思维,01缩数变换,线段树分割)

    题干: DZY has a sequence a[1..n]a[1..n]. It is a permutation of integers 1∼n1∼n. Now he wants to perfo ...

  7. 小清的线段树25题日志01 线段树下你和我 欢乐多又多

    前言 难度大致会按排序来 就不写总结啦 嘻嘻 适合刚学线段树的人(和我一样 练手 /*if you can't see the repayWhy not just work step by stepr ...

  8. 2019.01.21 bzoj2441: [中山市选2011]小W的问题(树状数组+权值线段树)

    传送门 数据结构优化计数菜题. 题意简述:给nnn个点问有多少个www型. www型的定义: 由5个不同的点组成,满足x1<x2<x3<x4<x5,x3>x1>x2 ...

  9. 2019.01.13 bzoj4137: [FJOI2015]火星商店问题(线段树分治+可持久化01trie)

    传送门 题意:序列上有nnn个商店,有两种事件会发生: sss商店上进购标价为vvv的一个物品 求编号为[l,r][l,r][l,r]之间的位置买ddd天内新进购的所有物品与一个数xxx异或值的最大值 ...

  10. 【算法分析】实验 4. 回溯法求解0-1背包等问题

    目录 实验内容 实验目的 实验结果 步骤1:描述与分析 步骤2:策略以及数据结构 步骤3 步骤4 步骤5 步骤6 实验总结 实验内容 本实验要求基于算法设计与分析的一般过程(即待求解问题的描述.算法设 ...

最新文章

  1. 107. Binary Tree Level Order Traversal II
  2. 一本算法刷题必读配套书(附链接)
  3. 每天2小时,吃透 985博士总结的这份保姆级TensorFlow + PyTorch笔记(20G高清/PPT/代码)...
  4. 关于linux下目录树的查看TEEE命令
  5. JS组件系列——Bootstrap Table 表格行拖拽
  6. Java并发编程(01):线程的创建方式,状态周期管理
  7. 【Kafka】《Kafka权威指南》入门
  8. 【转】去除inline-block元素的间隙
  9. pycharm如何修改文件名
  10. jQuery设置iframe的高度
  11. J - 免费馅饼(动态规划)数塔
  12. mysql字符类型_MySQL学习分享--字符类型
  13. vue中使用微信聊天表情
  14. linux mint 环境配置jimi
  15. Protected multilib versions XXX
  16. 侯捷C++视频(百度云盘)
  17. QQ互联第三方登录多应用用户登录打通
  18. 文本分词并统计出现次数最高的几个词Python
  19. 《炒股的智慧》文摘1
  20. spring-boot-starter-parent作用及测试

热门文章

  1. 谷歌开源的代码评审规范,值得借鉴!
  2. 搜狐Linux运维工程师面试真题曝光
  3. 技术圈几个牛逼的公号推荐给大家
  4. 0 基础转行 Android 工程师是种怎样的体验?
  5. C语言求字符串并集,怎样用c语言写求集合的交集,并集,补集”这个程序?
  6. buuct 假如给我三天光明 misc_【习作园地】假如给我三天光明读后感
  7. android第一个项目HelloWorld的搭建
  8. Poj2826 An Easy Problem
  9. quartz定时任务中常用的cron表达式
  10. leecode 树是否是平衡树 java