作为当代建筑的爱好者,农夫约翰建造了一个完美圆环形状的新牛棚。
牛棚内部有 nn 个房间,围成一个环形,按顺时针编号为 1∼n1∼n,所有相邻房间之间的距离均为 11。
每个房间都既有通向相邻两个房间的门,也有通向牛棚外部的门。
约翰想让第 ii 个房间内恰好有 riri 头牛。
为了让奶牛们有序的进入牛棚,他计划打开一个外门,让牛从该门进入。
然后,每头牛顺时针(即当 i
请确定他的奶牛需要行走的最小总距离。
输入格式
第一行包含整数 nn。
接下来 nn 行,包含 r1,…,rnr1,…,rn。
输出格式
数据范围
3≤n≤10003≤n≤1000,
1≤ri≤1001≤ri≤100
输入样例:
输出样例:
样例解释
最佳方案是让奶牛们从第二个房间进入。
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1010;
int r[N];
int s[N];
int n;
int main() {
cin >> n;
for (int i = 0; i < n; ++i) {
cin >> r[i];
s[i+1] = s[i] + r[i];
}
//p0
int p0 = 0;
for (int i = 1; i < n; ++i) p0 += r[i] * i;
int res = p0;
//pi = pi-1 - s[n] + n*ri-1
//pi = p0 - i * s[n] + n * s[i];
for (int i = 1; i < n; ++i) {
int pi = p0 - i * s[n] + n * s[i];
res = min(res,pi);
}
cout << res << endl;
return 0;
}