4663: 【GESP2412五级】武器强化
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:1
解决:1
题目描述
小杨有 种武器和 种强化材料。第 种强化材料会适配第 种武器,小杨可以花费 金币将该材料对应的适配武器修改为任意武器。
小杨最喜欢第 种武器,因此他希望适配该武器的强化材料种类数严格大于其他的武器,请你帮小杨计算为了满足该条件最少需要花费多少金币。
输入
第一行包含两个正整数 ,含义如题面所示。
之后 行,每行包含两个正整数 ,代表第 种强化材料的适配武器和修改花费。
输出
输出一个整数,代表能够使适配第 种武器的强化材料种类数严格大于其他的武器最少需要花费的金币。
样例输入 复制
4 4
1 1
2 1
3 1
3 2
样例输出 复制
1
提示
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int n, m;
int cnt[1010];
vector < int > cs[1010];
ll calc(int aim) {
int cur_cnt = cnt[1];
ll res = 0;
vector < int > tmp;
for (int i = 2; i <= n; i++) {
int buy = max((int) cs[i].size() - aim + 1, 0);
for (int j = 0; j < buy; ++j) {
res += (ll) cs[i][j];
}
cur_cnt += buy;
for (int j = buy; j < cs[i].size(); ++j) {
tmp.push_back(cs[i][j]);
}
}
sort(tmp.begin(), tmp.end());
for (int i = 0; i < aim - cur_cnt; i++) {
res += (ll) tmp[i];
}
return res;
}
signed main() {
// freopen("06.in", "r", stdin);
cin >> n >> m;
for (int i = 1; i <= m; i++) {
int p, c;
cin >> p >> c;
cnt[p]++;
cs[p].push_back(c);
}
for (int i = 1; i <= n; i++) {
sort(cs[i].begin(), cs[i].end());
}
ll ans = 1e18;
for (int i = max(cnt[1], 1); i <= m; ++i) {
ans = min(ans, calc(i));
}
cout << ans << "\n";
}