1 solutions

  • 1
    @ 2025-5-21 19:37:33
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    int n,m;
    const int N=1010;
    int cnt[N];
    vector<int> cs[N];
    LL cal(int aim)
    {
    	int cur_cnt=cnt[1];//初始数量
    	vector<int> tmp;
    	LL res=0;
    	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+=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()); //在武器[1]的数量为aim的情况下,多出来的武器 
    	for(int i=0;i<aim-cur_cnt;i++) //计算还差的武器[1]的强化材料的数量 
    	{
    		res+=tmp[i];
    	}
    	return res;
    }
    int main()
    {
    	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,cal(i));
    	}
    	cout<<ans;
    	return 0;
     } 
    
    • 1

    Information

    ID
    2218
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    7
    Tags
    # Submissions
    6
    Accepted
    3
    Uploaded By