1 solutions

  • 0
    @ 2024-9-25 21:42:24

    对每个奶牛的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;
    }
    
    • @ 2024-9-26 12:06:23

      蓝书一眼贪心

  • 1

Information

ID
494
Time
1000ms
Memory
256MiB
Difficulty
10
Tags
# Submissions
2
Accepted
1
Uploaded By