1. 程式人生 > >BZOJ 1707 [Usaco2007 Nov]tanning分配防曬霜

BZOJ 1707 [Usaco2007 Nov]tanning分配防曬霜

data sam problems pro ems 過大 desc ios 配方

1707: [Usaco2007 Nov]tanning分配防曬霜

Time Limit: 5 Sec Memory Limit: 64 MB
Submit: 810 Solved: 387
[Submit][Status][Discuss]

Description

奶牛們計劃著去海灘上享受日光浴。為了避免皮膚被陽光灼傷,所有C(1 <= C <= 2500)頭奶牛必須在出門之前在身上抹防曬霜。第i頭奶牛適合的最小和最 大的SPF值分別為minSPF_i和maxSPF_i(1 <= minSPF_i <= 1,000; minSPF_i <= maxSPF_i <= 1,000)。如果某頭奶牛塗的防曬霜的SPF值過小,那麽陽光仍然能 把她的皮膚灼傷;如果防曬霜的SPF值過大,則會使日光浴與躺在屋裏睡覺變得 幾乎沒有差別。為此,奶牛們準備了一大籃子防曬霜,一共L(1 <= L <= 2500)瓶。第i瓶 防曬霜的SPF值為SPF_i(1 <= SPF_i <= 1,000)。瓶子的大小也不一定相同,第i 瓶防曬霜可供cover_i頭奶牛使用。當然,每頭奶牛只能塗某一個瓶子裏的防曬霜 ,而不能把若幹個瓶裏的混合著用。 請你計算一下,如果使用奶牛們準備的防曬霜,最多有多少奶牛能在不被灼 傷的前提下,享受到日光浴的效果?

Input

* 第1行: 2個用空格隔開的整數:C和L

* 第2..C+1行: 第i+1行給出了適合第i頭奶牛的SPF值的範圍:minSPF_i以及 maxSPF_i * 第C+2..C+L+1行: 第i+C+1行為了第i瓶防曬霜的參數:SPF_i和cover_i,兩個 數間用空格隔開。

Output

* 第1行: 輸出1個整數,表示最多有多少頭奶牛能享受到日光浴

Sample Input

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

輸入說明:

一共有3頭奶牛,2瓶防曬霜。3頭奶牛適應的SPF值分別為3..10,2..5,以
及1..5。2瓶防曬霜的SPF值分別為6(可使用2次)和4(可使用1次)。可能的分
配方案為:奶牛1使用第1瓶防曬霜,奶牛2或奶牛3使用第2瓶防曬霜。顯然,最
多只有2頭奶牛的需求能被滿足。

Sample Output

2 題目大意:有c只奶牛,有一個塗抹防曬霜的上限和下限。然後有l瓶放曬霜,每瓶能給w頭奶牛塗。 奶牛曬日光浴的條件是塗的防曬霜在範圍之內。求最多有多少頭奶牛能曬日光浴。 題解:貪心 對於第i瓶放曬霜,找出所有塗抹它能滿足條件的奶牛。先滿足上限低的。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 2550
using namespace std;

int c,l,ans;

struct
COW{ int l,r; }cow[maxn]; struct FSS{ int spf,w; }fss[maxn]; bool cmp1(COW a,COW b){return a.r<b.r;} bool cmp2(FSS a,FSS b){return a.spf<b.spf;} int main(){ scanf("%d%d",&c,&l); for(int i=1;i<=c;i++)scanf("%d%d",&cow[i].l,&cow[i].r); for(int i=1;i<=l;i++)scanf("%d%d",&fss[i].spf,&fss[i].w); sort(cow+1,cow+c+1,cmp1);sort(fss+1,fss+l+1,cmp2); for(int i=1;i<=c;i++) for(int j=1;j<=l;j++) if(fss[j].w&&cow[i].l<=fss[j].spf&&fss[j].spf<=cow[i].r){ ans++;fss[j].w--;break; } printf("%d\n",ans); return 0; }

BZOJ 1707 [Usaco2007 Nov]tanning分配防曬霜