题目:
输入一行数长度是N,然后有m行个锦囊可以改变这个数组,每个锦囊有2个元素,第一个元素是最多可以改变x个元素,第二个元素是可以改成xx这样得值。计算怎们使用锦囊让这组数改变后和最大
如:
5 3
1 2 3 4 5
1 5
4 4
3 3
输出22
#include<bits/stdc++.h>
using namespace std;
bool cmp(vector<int>a,vector<int>b){
return a[1]>b[1];
}
int main(){
int n,m;
cin>>n>>m; //cin>>n,m??????????????
vector<int>a(n);
vector<vector<int>>res(m,vector<int>(2));
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=0;i<m;i++)
cin>>res[i][0]>>res[i][1];
///完成输入//
sort(res.begin(),res.end(),cmp);
sort(a.begin(),a.end());
for(int i=0;i<m;i++){
int c=i;
if(res[i][1]<=a[0])
break;
if(res[i][1]>a[0]){
int index=0;
while(res[c][1]>a[index] && index<a.size()) index++;
int minum=min(res[i][0],index);
for(int j=0;j<minum;j++)
a[j]=res[i][1];
sort(a.begin(),a.end());
}
}
int sum=accumulate(a.begin(),a.end(),0);
cout<<sum;
}