区间贪心题目:区间覆盖&覆盖的区域长度

区间覆盖

传送门:山东理工2074

#include 
using namespace std;
int main()
{
    int n,m;
    int line[205];
    while(cin >> n >> m)
    {
        memset(line,0,sizeof(line));
        for(int i=1; i<=n; i++)
            cin >> line[i];
        sort(line+1,line+1+n);
        int qua=n;
        int sum=n;
        priority_queue<int,vector<int>,greater<int> >que;
        for(int i=1; i<n; i++)
        {
            if(line[i]+1==line[i+1])//连续
                qua--;
            else//不连续
            {
                que.push(line[i+1]-line[i]-1);
            }
        }
        while(m<qua)
        {
            sum+=que.top();
            que.pop();
            qua--;
        }
        cout << sum << endl ;
    }
    return 0;
}

优化一下,把0也看做一种进去que

#include 
using namespace std;
int line[205];
int main()
{
    int n,m;
    cin >> n >> m;
    for(int i=1;i<=n;i++)
        cin >> line[i];
    sort(line+1,line+1+n);
    priority_queue<int,vector<int>,greater<int> >que;
    for(int i=1;i<n;i++)
    {
        que.push(line[i+1]-line[i]-1);
    }
    int sum=n;
    while(m<n)
    {
        sum+=que.top();
        que.pop();
        n--;
    }
    cout << sum << endl ;
    return 0;
}

覆盖的区域长度

传送门:洛谷P2082

#include 
using namespace std;
struct _line
{
    long long start;
    long long endd;
}line[100005];
bool cmp1(struct _line a,struct _line b)
{
    if(a.start!=b.start)
        return a.start<b.start;
    else if(a.endd!=b.endd)
        return a.endd<b.endd;
    else
        return a.endd==b.endd;
}
int main()
{
    int n;
    cin >> n;
    for(int i=1; i<=n; i++)
    {
        cin >> line[i].start >> line[i].endd;
    }
    sort(line+1,line+1+n,cmp1);//贪心排序
    long long sum=0;
    long long now=0;
    for(int i=1;i<=n;i++)
    {
        if(line[i].start>now)
        {
            sum+=line[i].endd-line[i].start+1;
            now=line[i].endd;
        }
        else if(line[i].endd>now)
        {
            sum+=line[i].endd-now;
            now=line[i].endd;
        }
    }
    cout << sum << endl ;
    return 0;
}

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