[贪心] 防晒
作者:互联网
防晒
有C头奶牛进行日光浴,第i头奶牛需要minSPF[i]到maxSPF[i]单位强度之间的阳光。
每头奶牛在日光浴前必须涂防晒霜,防晒霜有L种,涂上第i种之后,身体接收到的阳光强度就会稳定为SPF[i],第i种防晒霜有cover[i]瓶。
求最多可以满足多少头奶牛进行日光浴。
输入格式
第一行输入整数C和L。
接下来的C行,按次序每行输入一头牛的minSPF和maxSPF值,即第i行输入minSPF[i]和maxSPF[i]。
再接下来的L行,按次序每行输入一种防晒霜的SPF和cover值,即第i行输入SPF[i]和cover[i]。
每行的数据之间用空格隔开。
输出格式
输出一个整数,代表最多可以满足奶牛日光浴的奶牛数目。
数据范围
1≤C,L≤2500,
1≤minSPF≤maxSPF≤1000,
1≤SPF≤1000
输入样例:
3 2
3 10
2 5
1 5
6 2
4 1
输出样例:
2
两个贪心的思路。
1.将所有奶牛按照 minSPF 从大到小的顺序排序,然后依次考虑每头奶牛;
对于每头奶牛,扫描当前所有能用的防晒霜,选择 SPF 值最大的防晒霜来用;
2.将所有奶牛按照 maxSPF 从小到大的顺序排序,然后依次考虑每头奶牛;
对于每头奶牛,扫描当前所有能用的防晒霜,选择 SPF 值最小的防晒霜来用;
#include<iostream>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;
struct node {
int minn, maxx;
};
bool cmp (node a, node b) {
return a.maxx < b.maxx;
}
vector<node > cp;
map<int, int>cover;
int main () {
int c, l, a, b;
cin >> c >> l;
for (int i = 1; i <= c; i++) {
cin >> a >> b;
cp.push_back({a, b});
}
sort(cp.begin(), cp.end(), cmp);
for (int i = 1; i <= l; i++) {
cin >> a >> b;
cover[a] += b;
}
int ans = 0;
for (int i = 0; i < c; i++) {
int minn = cp[i].minn, maxx = cp[i].maxx;
int p = -1;
map<int, int>::iterator it = cover.begin();
for (;it != cover.end(); it ++) {
if (it->first >= minn && it->first <= maxx && it->second > 0) {
p = it->first;
break;
}
}
if (p != -1) {
ans ++;
cover[p]--;
}
}
cout << ans;
return 0;
}
标签:cp,防晒,int,cover,防晒霜,奶牛,SPF,贪心 来源: https://blog.csdn.net/caipengbenren/article/details/89646982