Bzoj2034 2009国家集训队试题 最大收益 贪心+各种优化+二分图

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

从一開始枚举到最后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国家集训队试题 最大收益 贪心+各种优化+二分图

时间: 2024-08-26 13:04:54

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

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

Description 给出$N$件单位时间任务,对于第$i$件任务,如果要完成该任务,需要占用$[S_i, T_i]$间的某个时刻,且完成后会有$V_i$的收益.求最大收益. 澄清:一个时刻只能做一件任务,做一个任务也只需要一个时刻.$N≤5000$,$1 \leq Si \leq Ti \leq 10^8$,$1 \leq Vi \leq 10^8$. Input 第一行一个整数$N$,表示可供选择的任务个数. 接下来的第二到第$N+1$行,每行三个数,其中第$i+1$行依次为$S_i$,$

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

2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 7676  Solved: 3509[Submit][Status][Discuss] Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两只

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

[算法]莫队 [题解] BZOJ 2038 2009国家集训队 小Z的袜子(hose) 莫队算法 莫队--讲稿? 施工中--

【BZOJ 2039】 2039: [2009国家集训队]employ人员雇佣 (最小割)

2039: [2009国家集训队]employ人员雇佣 Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 1511  Solved: 728 Description 作为一个富有经营头脑的富翁,小L决定从本国最优秀的经理中雇佣一些来经营自己的公司.这些经理相互之间合作有一个贡献指数,(我们用Ei,j表示i经理对j经理的了解程度),即当经理i和经理j同时被雇佣时,经理i会对经理j做出贡献,使得所赚得的利润增加Ei,j.当然,雇佣每一个经理都需要花费一定

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

莫队..先按sqrt(n)分块, 然后按块的顺序对询问排序, 同块就按右端点排序. 然后就按排序后的顺序暴力求解即可. 时间复杂度O(n1.5) ------------------------------------------------------------------------------ #include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = 50009; int N,

bzoj 2038 [2009国家集训队]小Z的袜子(hose) 莫队算法

2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 10239  Solved: 4659[Submit][Status][Discuss] Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命--具体来说,小Z把这N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两

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

2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 9472  Solved: 4344 Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两只袜子是不是完整的一双,甚至不在意两只袜子是否一左一

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

2039: [2009国家集训队]employ人员雇佣 Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 1369  Solved: 667[Submit][Status][Discuss] Description 作为一个富有经营头脑的富翁,小L决定从本国最优秀的经理中雇佣一些来经营自己的公司.这些经理相互之间合作有一个贡献指数,(我们用Ei,j表示i经理对j经理的了解程度),即当经理i和经理j同时被雇佣时,经理i会对经理j做出贡献,使得所赚得的利

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

分块大法好 2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MB Submit: 2938  Solved: 1303 [Submit][Status] Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- 具体来说,小Z把这N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两只