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;
}

文末彩蛋:

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

相关推荐
青草地溪水旁2 小时前
C++中的Reactor和Proactor模型进行系统性解析
c++·网络编程‘
云天徽上2 小时前
【数据可视化-106】华为2025上半年财报分析:用Python和Pyecharts打造炫酷可视化大屏
开发语言·python·华为·信息可视化·数据分析·pyecharts
AMiner:AI科研助手2 小时前
警惕!你和ChatGPT的对话,可能正在制造分布式妄想
人工智能·分布式·算法·chatgpt·deepseek
墩墩分墩5 小时前
【Go语言入门教程】 Go语言的起源与技术特点:从诞生到现代编程利器(一)
开发语言·后端·golang·go
深耕AI5 小时前
【MFC中OnInitDialog虚函数详解:哪个是虚函数?两个OnInitDialog的关系】
c++·mfc
CHANG_THE_WORLD5 小时前
并发编程指南 同步操作与强制排序
开发语言·c++·算法
pl00205 小时前
C++虚函数&虚析构函数&纯虚函数的使用说明和理解
c++·虚函数·纯虚函数·虚析构函数
仰泳之鹅6 小时前
【C语言】深入理解指针(5)
c语言·开发语言
gaoshou456 小时前
代码随想录训练营第三十一天|LeetCode56.合并区间、LeetCode738.单调递增的数字
数据结构·算法