同一种类型的菜烹饪时间可能不一样。
#include <bits/stdc++.h>
using namespace std;
// 定义全局数组
int a[100005], b[100005], vis[100005], ans; // a存储元素,b存储对应的权重,vis用于记录每个元素的最小权重,ans用于累加结果
vector<int> s; // 用于存储有有效权重的元素的最小权重
int main()
{
int n, k; // n为元素数量,k为需要选取的最小权重元素的数量
cin >> n >> k; // 输入n和k
// 输入元素和对应的权重
for(int i = 1; i <= n; i++) cin >> a[i];
for(int i = 1; i <= n; i++) cin >> b[i];
// 遍历所有元素,更新每个元素的最小权重
for(int i = 1; i <= n; i++)
{
if(vis[a[i]]) // 如果已经记录过这个元素的最小权重
vis[a[i]] = min(vis[a[i]], b[i]); // 更新为更小的权重
else
vis[a[i]] = b[i]; // 首次记录这个元素的权重
}
// 将所有记录的最小权重加入向量s中
for(int i = 1; i <= 100002; i++)
if(vis[i]) s.push_back(vis[i]);
// 如果记录的最小权重数量少于k,则无法选取k个,输出-1
if(s.size() < k)
{
cout << -1;
return 0;
}
// 对权重进行排序,以便选取最小的k个
sort(s.begin(), s.end());
// 累加最小的k个权重
for(int i = 0; i < k; i++) ans += s[i];
// 输出结果
cout << ans;
return 0;
}