gesp(C++五级)(14)洛谷:B4071:[GESP202412 五级] 武器强化

gesp(C++五级)(14)洛谷:B4071:[GESP202412 五级] 武器强化

题目描述

小杨有 n n n 种武器和 m m m 种强化材料。第 i i i 种强化材料会适配第 p i p_i pi 种武器,小杨可以花费 c i c_i ci 金币将该材料对应的适配武器修改为任意武器。

小杨最喜欢第 1 1 1 种武器,因此他希望适配该武器的强化材料种类数严格大于其他的武器,请你帮小杨计算为了满足该条件最少需要花费多少金币。

输入格式

第一行包含两个正整数 n , m n,m n,m,含义如题面所示。

之后 m m m 行,每行包含两个正整数 p i , c i p_i,c_i pi,ci,代表第 i 种强化材料的适配武器和修改花费。

输出格式

输出一个整数,代表能够使适配第 1 1 1 种武器的强化材料种类数严格大于其他的武器最少需要花费的金币。

样例 #1

样例输入 #1

复制代码
4 4
1 1
2 1
3 1
3 2

样例输出 #1

复制代码
1

提示

样例解释

花费 1 1 1,将第三种强化材料的适配武器由 3 3 3 改为 1 1 1。此时,武器 1 1 1 有 2 2 2 种强化材料适配,武器 2 2 2 和武器 3 3 3 都各有 1 1 1 种强化材料适配,满足适配第 1 1 1 种武器的强化材料种类数严格大于其他的武器。

数据范围

对于 100 % 100\% 100% 的数据,保证 1 ≤ n , m ≤ 1   000 1\le n,m\le 1\, 000 1≤n,m≤1000, 1 ≤ p i ≤ n 1\le p_i\le n 1≤pi≤n, 1 ≤ c i ≤ 1 0 9 1\le c_i\le 10^9 1≤ci≤109。

子任务编号 得分占比 n n n m m m
1 1 1 20 % 20\% 20% ≤ 2 \le 2 ≤2 ≤ 1   000 \le 1\, 000 ≤1000
2 2 2 20 % 20\% 20% ≤ 1   000 \le 1\,000 ≤1000 ≤ 2 \le 2 ≤2
3 3 3 60 % 60\% 60% ≤ 1   000 \le 1\, 000 ≤1000 ≤ 1   000 \le 1\, 000 ≤1000

AC代码(100分)

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,m,p,c,ans=1e12+10; 
vector<ll> v[1010];//v[i]:存第i种武器的所有修改代价
//函数以t为武器1的目标数 
ll f(int t){
	ll now=v[1].size();//目前武器1的数量
	ll sum=0;//修改代价累加和
	vector<int> tmp;//临时动态数组
	for(int i=2;i<=n;i++){
		ll xg=max((ll)(v[i].size()-t+1),0ll);
		for(int j=0;j<=xg-1;j++){
			sum+=v[i][j];
		}
		now+=xg;
		for(int j=xg;j<v[i].size();j++){
			tmp.push_back(v[i][j]);
		}
	} 
	sort(tmp.begin(),tmp.end());
	for(int i=0;i<t-now;i++){
		sum+=tmp[i];
	}
	return sum;
} 
int main(){
	//输入 
	cin>>n>>m;
	for(ll i=1;i<=m;i++){
		cin>>p>>c;
		v[p].push_back(c);//存第p种武器的所有修改代价 
	}
	//将每个动态数组v[i]中的修改代价升序排序 
	for(int i=1;i<=n;i++){
		sort(v[i].begin(),v[i].end());
	}
	//暴力枚举找答案:以i为武器1的目标数 
	for(ll i=max((ll)v[1].size(),1ll);i<=m;i++){
		ans=min(ans,f(i));
	} 
	//输出答案
	cout<<ans; 
	return 0;
}

文末彩蛋:

点击王老师青少年编程主页有更多精彩内容

相关推荐
吴_知遇29 分钟前
【华为OD机试真题】428、连续字母长度 | 机试真题+思路参考+代码解析(E卷)(C++)
开发语言·c++·华为od
LaoWaiHang1 小时前
MFC案例:使用键盘按键放大、缩小窗口图像的实验
c++·mfc
山北雨夜漫步1 小时前
机器学习 Day14 XGboost(极端梯度提升树)算法
人工智能·算法·机器学习
basketball6161 小时前
Python torchvision.transforms 下常用图像处理方法
开发语言·图像处理·python
到底怎么取名字不会重复1 小时前
Day10——LeetCode15&560
c++·算法·leetcode·哈希算法·散列表
宁酱醇1 小时前
各种各样的bug合集
开发语言·笔记·python·gitlab·bug
啊吧怪不啊吧1 小时前
Linux常见指令介绍下(入门级)
linux·开发语言·centos
谷晓光1 小时前
Python 中 `r` 前缀:字符串处理的“防转义利器”
开发语言·python
Tiger Z1 小时前
R 语言科研绘图第 41 期 --- 桑基图-基础
开发语言·r语言·贴图
chuxinweihui2 小时前
数据结构——二叉树,堆
c语言·开发语言·数据结构·学习·算法·链表