卧薪尝胆,厚积薄发。
USACO07NOV GOLD 防晒霜Sunscreen
Date: Tue Sep 18 23:50:19 CST 2018 In Category: NoCategory

Description:

$n$ 头牛,每头牛能忍耐的阳光强度是一个区间,防晒霜可以将阳光固定在一个点,给出牛和一些防晒霜,问最多能满足几头牛。
$1\le n \le 2500$

Solution:

贪心,相当于是线段覆盖点,把所有线段按左端点递减排序,每次选能选的最大的防晒霜,之所以这样是因为它后面的左端点比他小,那么越靠前的点在之后能满足的牛就更多,因为如果大 $r$ 了都能行,但如果小了就只有小的能行了,因此要尽量将小的留下来。

Code:


#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
#define MAXN 2510
struct line
{
int l,r;
}l[MAXN];
bool cmp_l(line a,line b){return a.l > b.l;}
int cnt[MAXN];
int n,m;
int main()
{
scanf("%d%d",&n,&m);
for(int i = 1;i <= n;++i)scanf("%d%d",&l[i].l,&l[i].r);
sort(l + 1,l + 1 + n,cmp_l);
int a,b;
for(int i = 1;i <= m;++i)
{
scanf("%d%d",&a,&b);
cnt[a] += b;
}
int ans = 0;
for(int i = 1;i <= n;++i)
{
for(int j = l[i].r;j >= l[i].l;--j)
{
if(cnt[j] != 0)
{
++ans;
--cnt[j];
break;
}
}
}
cout << ans << endl;
return 0;
}
In tag: 算法-贪心
Copyright © 2020 wjh15101051
ღゝ◡╹)ノ♡