[R18C]支架2

贪心 每个支架 尽量匹配和它重量相近的,将可以承受更高重量的支架留下给更重的物品,从而达到更多的匹配

// [R18C]支架2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
/*
题目地址:
https://bs.daimayuan.top/p/105
题目名称:
[R18C]支架2
题目描述:
有 n 个支架,第 i 个支架的承重能力为 a_i,即可以摆放任何重量不超过 a_i 的物品,但是只能摆放一件。
校长已经购买了 m 个艺术品,第 i 个艺术品的重量为 b_i。
求最多能把多少个艺术品同时摆放在支架上。
输入格式:
第一行包含两个整数 n, m,分别表示支架的数量和艺术品的数量。
第二行包含 n 个整数 a_i,分别表示每个支架的承重能力。
第三行包含 m 个整数 b_i,分别表示每个艺术品的重量。
输出格式:
输出一个整数,表示最多能把多少个艺术品同时摆放在支架上。
数据范围:
对于 100% 的数据,1≤n,m≤3000,1≤a_i,b_i≤10^9。
样例输入:
6 5
3 4 8 2 1 4
9 4 1 3 3
样例输出:
4
样例解释:
一种摆放方案为:
①将第 2 个艺术品摆放在第 2 个支架上、
②将第 3 个艺术品摆放在第 1 个支架上、
③将第 4 个艺术品摆放在第 3 个支架上、
④将第 5 个艺术品摆放在第 6 个支架上。
样例输入:
3 5
1000000000 1000000000 1000000000
9 4 1 3 3
样例输出:
3

*/
#include <iostream>
#include <algorithm>

using namespace std;

const int N = 3010;
int a[N];
int b[N];
int n, m;


int main()
{
	cin >> n >> m;
	for (int i = 0; i < n; i++) {
		cin >> a[i];
	}
	for(int i= 0;i <m;i++){
		cin >> b[i];
	}

	sort(a, a + n); sort(b, b + m);

	int l = 0; int r = 0;
	int ans = 0;
	while (l < n && r < m) {
		if (a[l] >= b[r]) {
			ans++; l++; r++;
		}
		else {
			l++;
		}
	}
	cout << ans << endl;
	return 0;
}

posted on 2025-07-14 11:16  itdef  阅读(9)  评论(0)    收藏  举报

导航