# Greedy# Sorting

f832 - 隕石 (Meteorite)

🔗 前往 ZeroJudge 原題

題目描述

題目描述了有 N 顆隕石和 M 個隕石捕捉器。每個捕捉器有容量限制,目標是最大化捕捉到的隕石總重量。

解題思路

本題可以使用貪心演算法解決。首先,將隕石重量和捕捉器容量分別排序。然後,從隕石重量最大的開始,嘗試找到一個容量足夠的捕捉器來捕捉它。如果找到,則將隕石重量加到總重量中,並將該捕捉器標記為已使用。重複此過程,直到所有隕石都被考慮過或所有捕捉器都被使用。

複雜度分析

  • 時間複雜度: O(n log n + m log m),其中 n 是隕石數量,m 是捕捉器數量。排序佔主導地位。
  • 空間複雜度: O(n + m),用於儲存隕石重量和捕捉器容量。

程式碼

#include <iostream>
#include <algorithm>
using namespace std;
int n,m,a[100001],b[100001];
long long int ans;
int main(){
	cin.tie(0); ios::sync_with_stdio(false);
	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);
	for(int i=n-1,it=m-1;i>=0&&it>=0;--i){
		if(a[i]<=b[it]){
			ans+=a[i];
			--it;
		}
	}
	cout << ans;
}

Discussion