20260723
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;
}

浙公网安备 33010602011771号