这个题真的是太神了。。。

从一開始枚举到最后n方的转化,各种优化基本都用到了极致。。。。

FQW的题解写了好多,个人感觉我全然没有在这里废话的必要了

直接看这里

各种方法真的是应有尽有

大概说下

首先能够想到一个KM算法求二分图最大代权匹配的问题对吧

左边是任务右边是时间

可是这个是三次方啊

那我们就按价值排序,这样就不用代权匹配了可是还是三方

可是左边在右边的连线是单调的。。。

所以就能够贪心推断了。。。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define MAX 5010
#define rep(i,j,k) for(int i = j; i <= k; i++) using namespace std; int n, Link[MAX];
long long ans = 0;
int b[MAX]; struct wbysr
{
int Begin, end, value;
} a[MAX]; bool cmp (wbysr a1, wbysr a2)
{
return a1.Begin < a2.Begin || (a1.Begin == a2.Begin && a1.end < a2.end);
} bool cmp2 (wbysr a1, wbysr a2)
{
return a1.value > a2.value;
} bool find (int now, int x)
{
if (b[x] > a[now].end)
return 0;
if (!Link[x])
{
Link[x] = now;
return 1;
}
int j = Link[x];
if (a[now].end > a[j].end)
return find (now,x + 1);
else
{
if (find(j, x + 1))
{
Link[x] = now;
return 1;
}
}
return 0;
} int main()
{
scanf ("%d", &n);
rep (i, 1, n)
scanf ("%d%d%d", &a[i].Begin, &a[i].end, &a[i].value);
sort (a + 1, a + 1 + n, cmp);
int now = 0;
rep (i, 1, n)
{
now = max (now + 1, a[i].Begin);
b[i] = now;
}
sort (a + 1, a + 1 + n, cmp2);
b[n+1] = 0x7fffffff / 3;
rep (i, 1, n)
{
int j;
for (j = 1; j <= n; j++)
if (b[j] >= a[i].Begin && b[j] <= a[i].end)
break;
if (find(i, j))
ans += a[i].value;
}
cout << ans << endl;
return 0;
}

Bzoj2034 2009国家集训队试题 最大收益 贪心+各种优化+二分图的更多相关文章

  1. BZOJ2034 [2009国家集训队]最大收益

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  2. BZOJ2034 【2009国家集训队】最大收益

    题面 题解 第一眼:线段树优化连边的裸题 刚准备打,突然发现: \(1 \leq S_i \leq T_i \leq 10^8\) 这™用个鬼的线段树啊 经过一番寻找,在网上找到了一篇论文 大家可以去 ...

  3. BZOJ 2034 【2009国家集训队】 最大收益

    Description 给出\(N\)件单位时间任务,对于第\(i\)件任务,如果要完成该任务,需要占用\([S_i, T_i]\)间的某个时刻,且完成后会有\(V_i\)的收益.求最大收益. 澄清: ...

  4. 【BZOJ2034】[2009国家集训队]最大收益 贪心优化最优匹配

    [BZOJ2034][2009国家集训队]最大收益 Description 给出N件单位时间任务,对于第i件任务,如果要完成该任务,需要占用[Si, Ti]间的某个时刻,且完成后会有Vi的收益.求最大 ...

  5. BZOJ 2034: [2009国家集训队]最大收益 [贪心优化 Hungary]

    2034: [2009国家集训队]最大收益 题意:\(n \le 5000\)个区间\(l,r\le 10^8\),每个区间可以选一个点得到val[i]的价值,每个点最多选1次,求最大价值 线段树优化 ...

  6. BZOJ_2039_[2009国家集训队]employ人员雇佣_ 最小割

    BZOJ_2039_[2009国家集训队]employ人员雇佣_ 最小割 Description 作为一个富有经营头脑的富翁,小L决定从本国最优秀的经理中雇佣一些来经营自己的公司.这些经理相互之间合作 ...

  7. BZOJ 2039: [2009国家集训队]employ人员雇佣

    2039: [2009国家集训队]employ人员雇佣 Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 1369  Solved: 667[Submit ...

  8. BZOJ 2038: [2009国家集训队]小Z的袜子(hose) [莫队算法]【学习笔记】

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 7687  Solved: 3516[Subm ...

  9. BZOJ 2038: [2009国家集训队]小Z的袜子(hose)

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 7676  Solved: 3509[Subm ...

随机推荐

  1. codeforces 15D . Map 优先队列

    题目链接 题目意思很简单nm的矩阵里, 选若干个ab的小矩阵, 定义每个矩阵的值为这个矩阵里的所有数的和-最小值*数的个数. 选小矩阵时, 优先选值最小的,然后次小的.. 知道不能选位置. 输出所有矩 ...

  2. Oracle EBS-SQL (SYS-15):查询表空间2.sql

    /*表空间查询*/ SELECT d.status "状态", d.tablespace_name "名称", d.contents "类型" ...

  3. Microsoft Office 2010 Pro VOL简体中文正式版

    网友们期待的Microsoft Office Professional Plus 2010 VOL简体中文正式版.所谓的“VOL”,即是Volume Licensing for Organizatio ...

  4. 深入GDI图像显示

    摘  要:本文首先给出了一种结合了DIB和DDB两种位图优点的图像显示方法,其次对GDI函数的高级应用,如透明位图显示.图像旋转显示.图像镜像显示进行了研究. 关键词:GDI图像显示,特殊GDI函数的 ...

  5. delphi 7中使用idhttp抓取网页 解决假死现象

    在delphi 7中使用idhttp抓取网页,造成窗口无反应的假死状态.通过搜索获得两种方法. 1.写在线程中,但是调用比较麻烦 2.使用delphi 提供的idantifreeze(必须安装indy ...

  6. [LeetCode][Python]Integer to Roman

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com'https://oj.leetcode.com/problems/integer ...

  7. javascript关键字加亮加连接

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" " http://www.w3.org/TR/html4/str ...

  8. android 内存优化

    OOM 内存泄漏引起很多问题: 1:节目卡顿.反应慢(高内存使用情况JVM 虚拟机的频繁离职GC) 2:消失 3:直接崩溃 ANDROID 内存面临的问题 1: 有限的堆内存,原始仅仅有16M 2:内 ...

  9. 指针和Const限定符

    指针和Const限定符 1.指向const对象的指针 如果指针指向的是const对象,则不允许使用指针来改变其所指的const值.C++要求指向const对象的指针具有const特性. const d ...

  10. 按模板打印word防止并发操作

    /// <summary> /// /// <summary> /// 打印人员备案表 /// </summary> /// <param name=&quo ...