【BZOJ2034】最大收益(贪心)
【BZOJ2034】最大收益(贪心)
题面
题解
首先显然让价值越大的占用一个时刻一定更优。
所以把所有东西按照价值排序之后来处理,那么显然就是把前面的全部放好之后,考虑来放当前这个东西,如果能够放下那么就放,否则直接丢掉。
考虑如何检查是否能下放。
首先缩小区间的规模,对于每个位置,找到从他们的左端点开始,往右第一个未被标记的点标记,最后只有被标记的点才可能出现在匹配中。
那么记录每个点的匹配位置,然后从左往右考虑所有可以的匹配位置,如果当前位置没有匹配,则直接匹配。
否则如果当前位置匹配的东西的\([l,r]\)的\(r\)比这段区间的\(r\)大,则尝试能否匹配本来放的东西(因为它的\(r\)更大,更可能在后面找到一个匹配),如果不行则不行,否则则修改匹配有解。
这样子最多检查\(n\)个元素的匹配,而只需要加入\(n\)次,所以复杂度\(O(n^2)\)
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
#define ll long long
#define MAX 5050
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
int n,p[MAX],book[MAX];ll ans;
struct Node{int l,r,v,p;}a[MAX];
bool cmpv(Node a,Node b){return a.v>b.v;}
bool cmpl(Node a,Node b){return a.l<b.l;}
bool check(int x,int pos)
{
if(p[pos]>a[x].r)return false;
if(!book[pos]){book[pos]=x;return true;}
if(a[book[pos]].r<=a[x].r)return check(x,pos+1);
else if(check(book[pos],pos+1)){book[pos]=x;return true;}
return false;
}
int main()
{
n=read();
for(int i=1;i<=n;++i)a[i].l=read(),a[i].r=read(),a[i].v=read();
sort(&a[1],&a[n+1],cmpl);
for(int i=1;i<=n;++i)p[i]=max(p[i-1]+1,a[i].l);
a[1].p=1;
for(int i=2;i<=n;++i)
{
a[i].p=a[i-1].p;
while(p[a[i].p]<a[i].l&&a[i].p<n)++a[i].p;
}
sort(&a[1],&a[n+1],cmpv);
for(int i=1;i<=n;++i)if(check(i,a[i].p))ans+=a[i].v;
printf("%lld\n",ans);
return 0;
}
【BZOJ2034】最大收益(贪心)的更多相关文章
- 【BZOJ2034】[2009国家集训队]最大收益 贪心优化最优匹配
[BZOJ2034][2009国家集训队]最大收益 Description 给出N件单位时间任务,对于第i件任务,如果要完成该任务,需要占用[Si, Ti]间的某个时刻,且完成后会有Vi的收益.求最大 ...
- Bzoj2034 2009国家集训队试题 最大收益 贪心+各种优化+二分图
这个题真的是太神了... 从一開始枚举到最后n方的转化,各种优化基本都用到了极致.... FQW的题解写了好多,个人感觉我全然没有在这里废话的必要了 直接看这里 各种方法真的是应有尽有 大概说下 首先 ...
- BZOJ 2034: [2009国家集训队]最大收益 [贪心优化 Hungary]
2034: [2009国家集训队]最大收益 题意:\(n \le 5000\)个区间\(l,r\le 10^8\),每个区间可以选一个点得到val[i]的价值,每个点最多选1次,求最大价值 线段树优化 ...
- 「中山纪中集训省选组D1T1」最大收益 贪心
题目描述 给出\(N\)件单位时间任务,对于第\(i\)件任务,如果要完成该任务,需要占用\([S_i, T_i]\)间的某个时刻,且完成后会有\(V_i\)的收益.求最大收益. 澄清:一个时刻只能做 ...
- K - 贪心 基础
FatMouse prepared M pounds of cat food, ready to trade with the cats guarding the warehouse containi ...
- BZOJ.2034.[2009国家集训队]最大收益(二分图匹配 贪心)
题目链接 双倍经验:BZOJ.4276.[ONTAK2015]Bajtman i Okrągły Robin(然而是个权限题.区间略有不同) \(Description\) 有\(n\)个任务,完成一 ...
- [luogu P2647] 最大收益(贪心+dp)
题目传送门:https://www.luogu.org/problem/show?pid=2647 题目描述 现在你面前有n个物品,编号分别为1,2,3,--,n.你可以在这当中任意选择任意多个物品. ...
- 【bzoj2034】 2009国家集训队—最大收益
http://www.lydsy.com/JudgeOnline/problem.php?id=2034 (题目链接) 题意 n个任务,每个任务只需要一个时刻就可以完成,完成后获得${W_i}$的收益 ...
- BZOJ2034 [2009国家集训队]最大收益
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
随机推荐
- iOS上手指点击波纹效果的实现
https://www.jianshu.com/p/35e6f53ca0fe 2016.10.19 22:00* 字数 135 阅读 2468评论 2喜欢 7 闲暇时间做了一个反馈手指点击屏幕的效果, ...
- 06_Hadoop分布式文件系统HDFS架构讲解
mr 计算框架 假如有三台机器 统领者master 01 02 03 每台机器都有过滤的应用程序 移动数据 01机== 300M >mr 移动计算 java程序传递给各个机器(mr) ...
- JEECG&JWT异常捕获强化处理 | Java: Meaning of catch (final SomeException e)?
//从header中得到token String authHeader = request.getHeader(JwtConstants.AUTHORIZATION); if (authHeader ...
- java list 去重
Guava ImmutableSet源码去重处理,Hash处理 - 汪小哥 - CSDN博客 https://blog.csdn.net/u012881904/article/details/6895 ...
- 优化MySQL性能的几种方法-总结
原文:http://bbs.landingbj.com/t-0-245601-1.html 1.要选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越 小,在它上 ...
- [转帖]Windows 10新预览版上线:可直接运行任意安卓APP了
Windows 10新预览版上线:可直接运行任意安卓APP了 http://www.pcbeta.com/viewnews-80316-1.html 今晨(3月13日),微软面向Fast Ring(快 ...
- IntelliJ IDEA启动Tomcat后,却无法访问Tomcat主页 等一系列问题
1.IntelliJ IDEA启动Tomcat后,却无法访问Tomcat主页 转:http://www.myexception.cn/other/1998827.html https://blog.c ...
- MySQL 单个表锁死 对查询语句无响应
这个时候应该怀疑读取都被加锁,应该尝试使用 show processlist 查看每一个正在运行的进程. 可以看到这样一个列表,里面有使用者即用户,正在使用数据库的 host, 使用的 db 目前的 ...
- 设计模式笔记:单一职责原则(SRP, Single Responsibility Principle)
1. 单一职责原则核心思想 一个类应该有且只有一个变化的原因. 2. 为什么引入单一职责原则 单一职责原则将不同的职责分离到单独的类,每一个职责都是一个变化的中心. 在SRP中,把职责定义为变化的原因 ...
- Python自动化运维ansible从入门到精通
1. 下载安装 在windows下安装ansible: