1 solutions
-
0
对每个奶牛的maxSPF进行排序,我们优先对maxSPF最小的涂符合其阳光强度的防晒霜中最小的;贪心证明如下:假设符合其阳光强度的防晒霜有x, y两种,x < y那么对于后面的奶牛,只会出现x,y都可以对其使用,或者是都不可使用,或者是x不可用,y可用。那么把x给当前奶牛使用就是最好的选择。
如果按minSPF排序,其右端点(maxSPF)不知道, 排在前面的牛的maxSPF可能很大,就不用把较小的给它。因此直接给maxSPF排序依次涂最小的防晒霜。
#include<bits/stdc++.h> using namespace std; int n, m, ans, x, y; int spf[1111]; struct aaa{ int a, b; }mik[2555]; bool cmp(aaa x, aaa y){ return x.b < y.b; } int main(){ cin>>n>>m; for(int i=0;i<n;i++) scanf("%d%d",&mik[i].a,&mik[i].b); for(int i=0;i<m;i++){ scanf("%d%d",&x,&y); spf[x] += y; } sort(mik, mik + n, cmp); for(int i=0;i<n;i++) for(int j=mik[i].a;j<=mik[i].b;j++) if(spf[j]){ ans ++; spf[j] --; break; } cout<<ans<<endl; return 0; }
- 1
Information
- ID
- 494
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 10
- Tags
- # Submissions
- 2
- Accepted
- 1
- Uploaded By