codeforces-1084AThe Fair Nut and Elevator-题解

题目大意:

Nut在n层的房子里,ai人住在房子的第i-th层,每个人每天使用电梯两次:从他/她住的楼层到一楼,晚上回家时从一楼到他/她住的楼层。 不使用的电梯将停留在X层,(但是X还没有被选择)。当一个人需要从a层到b层时,电梯遵循简单的算法:

  1. 1.从第X层(最初停留在第X层)移动到第a层,并搭载乘客。
  2. 2.从a层移动到b层,(如果a = b,电梯只是开关门,但仍然从X层到达),从b层返回X层。
  3. 3.电梯从不换乘多人,总是在换乘下一位乘客之前回到X层。电梯在相邻楼层之间移动需要消耗一个单位的电力。所以从a-th楼b-th楼需要 |a-b| 单位的电力。

你的任务是通过选择一个最优的x-th层,帮助Nut找到一天足够使用的最小电力单元数量。(别忘了电梯最初停在第X层!!!)

输入 :第一行包含一个整数n(1≤n≤100)——层数。 第二行包含n整数a1,a2,…an,一个ai(0≤ai≤100)——每层的人数。

输出: 在一行中,打印问题的答案——最小的电力单元数。

例子

input

3

0 2 1

output

16

 请注意 在第一个例子中,答案可以通过选择第二层作为第X层来实现。每个人从二楼(有两个)每天花4度电,和一个人从第3-th每天会花8单位的电力(4⋅2 + 8⋅1 = 16) 在第二个例子中,答案可以通过选择1楼作为第X层来实现。

思路:

emmmmmmmm......暴力能过!!!每一步的注解在代码上有具体标出

不妨假设电梯先在一层(用 j 控制!!),(给一个循环,然再算在 i-th层),算出sum,最后调min()函数,算出电梯在i-th层的电力(最小值)

#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
	int n;
	int a[105];
	cin>>n;//输入楼层数 
	for(int i=1;i<=n;i++)
		cin>>a[i];//输入每层楼层的人数。 
		int sum,Min=0x3f3f3f;
	for(int j=1;j<=n;j++){//j表示电梯在的层数 
		sum=0;
		for(int k=1;k<=n;k++)
 			sum=sum+((abs(k-j)+abs(j-1)+abs(k-1))*2*a[k]);
		Min=min(Min,sum);
	}
	cout<<Min<<endl;
	return 0;
}

 

posted @ 2020-05-07 20:32  金鳞踏雨  阅读(2)  评论(0编辑  收藏  举报  来源