题解:P11789 [JOI 2019 Final] 画展 / Exhibition

· · 题解

考虑贪心。

我们想要右边的画框最大,且画最漂亮。

那么则可以将画框从大到小排序,根据画的价值也将画从大到小排序。

将画框依次按排完序后的顺序匹配画(不难证明这是正确的,因为画框只会越来越小,所以我们要尽可能多的选出合适的画)。

代码要点:

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e5 + 5;
int n, m, c[N], ans, now = 1;
struct node
{
    int s, v;
}a[N];
bool cmp(node a, node b)
{
    if (a.v != b.v) return a.v > b.v;
    return a.s > b.s;
}
bool cmp1(int a, int b)
{
    return a > b;
}
signed main()
{
    cin >> n >> m;
    for(int i = 1; i <= n; i ++)
    {
        cin >> a[i].s >> a[i].v;
    }
    for(int i = 1; i <= m; i ++) cin >> c[i];
    sort(a + 1, a + n + 1, cmp);
    sort(c + 1, c + m + 1, cmp1);
    for(int i = 1; i <= n && now <= m; i ++)
    {
        if(c[now] >= a[i].s)
        {
            ans ++;
            now ++;
        }
    }
    cout << ans << endl;
}//