1 solutions
-
1
#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