Question
给你一堆数,询问你至少需要更改多少数字才能使和
Solution
贪心
首先求出原数和,如果已经 则
对一个数进行修改,要使其和 , 则肯定将这个数改成
。
要使更改数字最少,那么肯定要让更改后的差值(加的值)尽可能大,因为始终将数改成,于是原数越小的应该越先改。
所以将原数按从小到大排序,然后 扫一遍即可。
Code:
#include<bits/stdc++.h>
using namespace std;
const int MAX_N=1e6 + 5;
int n,m,a[MAX_N],Sum,ans;
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i){
scanf("%d",&a[i]);
Sum=Sum+a[i];
}
sort(a+1,a+1+n);
for(ans=1;ans<=n;++ans){
if(Sum>=m){
break;
}
Sum=Sum+9-a[ans];
}
printf("%d",ans);
return 0;
} 
京公网安备 11010502036488号