E - Box of Bricks (贪心)

E - Box of Bricks (贪心)

题意:给定 n n 个高度的砖块,每一步只能移动一个砖块,求最少步骤让所有砖块高度相等。

思路:签到题,根据贪心的思想,因为总砖块数不能改变,所以最后的目标高度 g o a l goal 我们可以预先求出来,
g o a l = i = 1 n a [ i ] n goal=\dfrac{\sum\limits_{i=1}^na[i]}{n}

然后将大于目标高度的砖块或者小于目标砖块的高度与目标高度取差值求和就是最后的答案。


a n s = a b s ( a [ i ] g o a l ) ( a [ i ] > g o a l )    = a b s ( a [ i ] g o a l ) ( a [ i ] < g o a l ) ans=\sum abs(a[i]-goal)\quad (\forall a[i]>goal)\\\quad\ \ =\sum abs(a[i]-goal)\quad (\forall a[i]<goal)
时间复杂度: O ( n ) O(n)

AC代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm> 
using namespace std;
typedef long long ll;
const int N=1e2+10;
#define mst(a) memset(a,0,sizeof a)
int a[N];
int main(){
	int n,k=0;
	while(cin>>n&&n){
		int sum=0; 
		for(int i=1;i<=n;i++)
			cin>>a[i],sum+=a[i];
		sum/=n;
		int ans=0;
			for(int i=1;i<=n;i++)
				if(a[i]>sum) ans+=a[i]-sum;
		printf("Set #%d\n",++k);
		printf("The minimum number of moves is %d.\n\n",ans);
	}
	return 0;
} 
原创文章 201 获赞 165 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_45750972/article/details/106107180
Box
今日推荐