【贪心】防晒霜Sunscreen

L i n k Link Link

l u o g u luogu luogu 2887 2887 2887
P O J POJ POJ 3614 3614 3614

D e s c r i p t i o n Description Description

有C个奶牛去晒太阳 (1 <=C <= 2500),每个奶牛各自能够忍受的阳光强度有一个最小值和一个最大值,太大就晒伤了,太小奶牛没感觉。

而刚开始的阳光的强度非常大,奶牛都承受不住,然后奶牛就得涂抹防晒霜,防晒霜的作用是让阳光照在身上的阳光强度固定为某个值。

那么为了不让奶牛烫伤,又不会没有效果。

给出了L种防晒霜。(1<=L<=2500)每种的数量和固定的阳光强度也给出来了

每个奶牛只能抹一瓶防晒霜,最后问能够享受晒太阳的奶牛有几个。

I n p u t Input Input

第1行:两个以空格分隔的整数:C和L
第2行.C +1:第i行描述牛我的乳液需要两个整数:minSPF i和maxSPF i
第3行C +2 … C + L+1 描述了一种防晒液瓶我用空格隔开的整数:SPFi和Numi

O u t p u t Output Output

带有整数的单行,该整数是晒黑时可以保护的最大奶牛数

S a m p l e Sample Sample I n p u t Input Input

3 2
3 10
2 5
1 5
6 2
4 1

S a m p l e Sample Sample O u t p u t Output Output

2

T r a i n Train Train o f of of T h o u g h t Thought Thought

将奶牛按承受范围的最低值从大到小排个序,一个个找防晒露,为了让后面的牛能涂,所以选可以涂的最大值

C o d e Code Code

#include
#include
#include
using namespace std;
int C,L,ans;
struct cow
{int start,end;}Cow[2505];
struct spf
{int range,num;}Spf[2505]; 
bool cmp(cow x,cow y)
{return x.start>y.start;}
bool cmpp(spf x,spf y)
{return x.range<y.range;}
int main()
{
	scanf("%d%d",&C,&L);
	for (int i=1; i<=C; ++i)
	  scanf("%d%d",&Cow[i].start,&Cow[i].end);
	for (int i=1; i<=L; ++i)
	  scanf("%d%d",&Spf[i].range,&Spf[i].num);
	sort(Cow+1,Cow+C+1,cmp);
	sort(Spf+1,Spf+L+1,cmpp);//排序
	for (int i=1; i<=C; ++i) {
	  int maxx=0;
	  for (int j=1; j<=L; ++j)
	   if (Spf[j].range>=Cow[i].start && Spf[j].range<=Cow[i].end && Spf[j].num>0)//要满足条件
	    maxx=max(maxx,j);//取最大值
	  if (maxx!=0) ans++,Spf[maxx].num--;//记录答案
	 }	
	printf("%d",ans);
}

你可能感兴趣的:(贪心)